qa-skills 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-codeceptjs-writer
|
|
3
|
+
description: Generate CodeceptJS scenario-driven E2E and BDD tests for TypeScript with human-readable syntax, multi-backend support (Playwright/WebDriver/Puppeteer), and Gherkin integration.
|
|
4
|
+
output_dir: tests/e2e
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# QA CodeceptJS Writer
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Write CodeceptJS BDD/scenario-driven E2E tests from test case specifications. Transform structured test cases into executable scenarios using human-readable syntax (`I.click`, `I.see`, `I.fillField`), multi-backend support, and optional Gherkin BDD integration.
|
|
12
|
+
|
|
13
|
+
## Trigger Phrases
|
|
14
|
+
|
|
15
|
+
- "Write CodeceptJS tests for [feature/flow]"
|
|
16
|
+
- "Generate CodeceptJS E2E tests from test cases"
|
|
17
|
+
- "Create CodeceptJS BDD scenarios for [flow]"
|
|
18
|
+
- "Add CodeceptJS tests with Gherkin for [feature]"
|
|
19
|
+
- "CodeceptJS scenario-driven tests for [page]"
|
|
20
|
+
- "CodeceptJS data-driven tests for [scenario]"
|
|
21
|
+
- "CodeceptJS Page Object for [page]"
|
|
22
|
+
- "CodeceptJS tests with Playwright/WebDriver/Puppeteer backend"
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. **Read test cases** — From qa-testcase-from-docs, qa-manual-test-designer, qa-browser-data-collector
|
|
27
|
+
2. **Generate scenarios** — Create `Feature`/`Scenario` blocks or `.feature` files
|
|
28
|
+
3. **Add step definitions** — If BDD mode: implement Given/When/Then in step definition files
|
|
29
|
+
4. **Configure helper** — Ensure `codecept.conf.ts` has correct helper (Playwright, WebDriver, Puppeteer)
|
|
30
|
+
|
|
31
|
+
## Key Features
|
|
32
|
+
|
|
33
|
+
| Feature | Description |
|
|
34
|
+
|---------|-------------|
|
|
35
|
+
| **Scenario-driven syntax** | `I.click`, `I.see`, `I.fillField`, `I.grabTextFrom` — human-readable, framework-agnostic |
|
|
36
|
+
| **Multi-backend** | Playwright, WebDriver, Puppeteer — switch via config without changing test code |
|
|
37
|
+
| **BDD Gherkin** | `.feature` files + step definitions; Given/When/Then; Background, Examples, tables |
|
|
38
|
+
| **Page Objects** | Encapsulate page logic; inject via `inject()` |
|
|
39
|
+
| **Custom helpers** | Extend I with custom methods |
|
|
40
|
+
| **Data-driven** | `Data().Scenario` for parameterized scenarios |
|
|
41
|
+
| **within()** | Scope locators to a container element |
|
|
42
|
+
|
|
43
|
+
## Test Types
|
|
44
|
+
|
|
45
|
+
| Type | Scope | Approach |
|
|
46
|
+
|------|-------|----------|
|
|
47
|
+
| **Scenario** | E2E user flows | `Feature`/`Scenario` blocks; `I` actor |
|
|
48
|
+
| **BDD Gherkin** | Business-readable acceptance | `.feature` files + step definitions |
|
|
49
|
+
| **Data-driven** | Same flow, multiple data sets | `Data(table).Scenario` with `current` |
|
|
50
|
+
|
|
51
|
+
## Key Patterns
|
|
52
|
+
|
|
53
|
+
- **Structure:** `Feature('name')` / `Scenario('title', ({ I }) => { ... })`
|
|
54
|
+
- **Navigation:** `I.amOnPage('/path')`
|
|
55
|
+
- **Interactions:** `I.click('Submit')`, `I.fillField('Email', 'a@b.com')`, `I.selectOption('Country', 'US')`
|
|
56
|
+
- **Assertions:** `I.see('Welcome')`, `I.seeElement('.user')`, `I.dontSee('Error')`
|
|
57
|
+
- **Scoped locators:** `within('.modal', () => { I.click('OK'); })`
|
|
58
|
+
- **Data-driven:** `Data(accounts).Scenario('Login', ({ I, current }) => { ... })`
|
|
59
|
+
- **Debugging:** `pause()` — interactive console during execution
|
|
60
|
+
- **Auth:** `autoLogin` plugin — login once, reuse session
|
|
61
|
+
|
|
62
|
+
See `references/patterns.md` for full pattern reference.
|
|
63
|
+
|
|
64
|
+
## BDD Mode (Gherkin)
|
|
65
|
+
|
|
66
|
+
- **Feature files:** `features/*.feature` — human-readable scenarios
|
|
67
|
+
- **Step definitions:** `step_definitions/steps.ts` — Given/When/Then implementations
|
|
68
|
+
- **Init:** `npx codeceptjs gherkin:init`
|
|
69
|
+
- **Snippets:** `npx codeceptjs gherkin:snippets` — generate stubs for undefined steps
|
|
70
|
+
- **Run features only:** `npx codeceptjs run --features`
|
|
71
|
+
|
|
72
|
+
See `references/patterns.md` for Gherkin patterns.
|
|
73
|
+
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
- **codecept.conf.ts** — helpers (Playwright/WebDriver/Puppeteer), plugins (autoLogin, allure), include (Page Objects), output
|
|
77
|
+
- **Helper options** — url, browser, restart, video, trace, storageState
|
|
78
|
+
|
|
79
|
+
See `references/config.md` for full configuration guide.
|
|
80
|
+
|
|
81
|
+
## Context7 MCP
|
|
82
|
+
|
|
83
|
+
Uses Context7 MCP to fetch CodeceptJS documentation when needed. Query for CodeceptJS API, helpers, or configuration when patterns are unclear.
|
|
84
|
+
|
|
85
|
+
## Scope
|
|
86
|
+
|
|
87
|
+
**Can do (autonomous):**
|
|
88
|
+
- Generate CodeceptJS scenario and BDD tests from test case specs
|
|
89
|
+
- Create Page Objects and inject them via `inject()`
|
|
90
|
+
- Add `Data().Scenario` for data-driven tests
|
|
91
|
+
- Configure `codecept.conf.ts` (helpers, plugins, include)
|
|
92
|
+
- Use `within()` for scoped interactions
|
|
93
|
+
- Add step definitions for Gherkin scenarios
|
|
94
|
+
- Use autoLogin plugin for auth
|
|
95
|
+
- Use Context7 MCP for CodeceptJS docs
|
|
96
|
+
|
|
97
|
+
**Cannot do (requires confirmation):**
|
|
98
|
+
- Change production code structure
|
|
99
|
+
- Add dependencies not in package.json
|
|
100
|
+
- Override project CodeceptJS config without approval
|
|
101
|
+
- Switch helper (Playwright ↔ WebDriver) without user preference
|
|
102
|
+
|
|
103
|
+
**Will not do (out of scope):**
|
|
104
|
+
- Execute tests (user runs `npx codeceptjs run`)
|
|
105
|
+
- Write Jest/Vitest unit tests (use qa-jest-writer)
|
|
106
|
+
- Modify CI/CD pipelines
|
|
107
|
+
- Bypass security or access restricted areas
|
|
108
|
+
|
|
109
|
+
## References
|
|
110
|
+
|
|
111
|
+
- `references/patterns.md` — Scenario syntax, BDD Gherkin, Page Objects, custom helpers, data-driven
|
|
112
|
+
- `references/config.md` — codecept.conf.ts, helpers, plugins, output
|
|
113
|
+
- `references/best-practices.md` — Readable scenarios, step granularity, helper selection
|
|
114
|
+
|
|
115
|
+
## Quality Checklist
|
|
116
|
+
|
|
117
|
+
- [ ] Human-readable steps; avoid raw CSS/XPath when semantic locators suffice
|
|
118
|
+
- [ ] Page Objects for page-specific logic; inject via `inject()`
|
|
119
|
+
- [ ] No hardcoded waits; use helper retry or explicit `I.waitForVisible`
|
|
120
|
+
- [ ] Tests independent; no shared state between scenarios
|
|
121
|
+
- [ ] BDD step definitions map to single, focused actions
|
|
122
|
+
- [ ] Data-driven tests use `Data().Scenario` with `current`
|
|
123
|
+
- [ ] Traceability to test case IDs where applicable
|
|
124
|
+
- [ ] No hardcoded secrets (use env vars)
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
| Symptom | Likely Cause | Fix |
|
|
129
|
+
|---------|--------------|-----|
|
|
130
|
+
| Element not found | Locator too specific, dynamic content | Use semantic locators (text, label); add `data-test` with customLocator |
|
|
131
|
+
| I is undefined | Wrong inject/context | Ensure `({ I }) =>` in Scenario; use `inject()` in step defs |
|
|
132
|
+
| Step definition not matched | Regex/string mismatch | Run `gherkin:snippets`; check Cucumber expressions |
|
|
133
|
+
| Backend-specific failure | Helper API differs | Playwright/WebDriver/Puppeteer have different methods; check helper docs |
|
|
134
|
+
| autoLogin not working | Config or TypeScript | Ensure plugin enabled; check login function export |
|
|
135
|
+
| Data().Scenario fails | current not passed | Use `({ I, current })`; access `current.columnName` |
|
|
136
|
+
| within() scope wrong | Nested structure | Verify container selector; use strict locators `{ css: '...' }` |
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# CodeceptJS Best Practices
|
|
2
|
+
|
|
3
|
+
Guidelines for maintainable, readable CodeceptJS scenarios.
|
|
4
|
+
|
|
5
|
+
## Readable Scenarios
|
|
6
|
+
|
|
7
|
+
### Use Human-Readable Steps
|
|
8
|
+
|
|
9
|
+
Prefer semantic, visible keywords over raw selectors:
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// GOOD: Readable, intent-focused
|
|
13
|
+
Scenario('user logs in', ({ I }) => {
|
|
14
|
+
I.amOnPage('/login');
|
|
15
|
+
I.fillField('Username', 'john');
|
|
16
|
+
I.fillField('Password', 'secret');
|
|
17
|
+
I.click('Sign In');
|
|
18
|
+
I.see('Welcome');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// AVOID: Overly technical
|
|
22
|
+
Scenario('user logs in', ({ I }) => {
|
|
23
|
+
I.amOnPage('/login');
|
|
24
|
+
I.fillField('#username', 'john');
|
|
25
|
+
I.fillField('input[type="password"]', 'secret');
|
|
26
|
+
I.click('.btn-primary');
|
|
27
|
+
I.seeElement('.welcome-msg');
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Leverage Locator Resolution
|
|
32
|
+
|
|
33
|
+
CodeceptJS resolves locators by label, link text, button text, then CSS/XPath. Use that:
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
// Prefer label/button text when unique
|
|
37
|
+
I.fillField('Email address', 'user@example.com');
|
|
38
|
+
I.click('Submit');
|
|
39
|
+
|
|
40
|
+
// Use data-test or data-qa with customLocator plugin for stability
|
|
41
|
+
I.click({ custom: 'submit-btn' });
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Step Granularity
|
|
45
|
+
|
|
46
|
+
### One Logical Action Per Step
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// GOOD: Clear, debuggable steps
|
|
50
|
+
Scenario('checkout flow', ({ I }) => {
|
|
51
|
+
I.amOnPage('/cart');
|
|
52
|
+
I.click('Proceed to checkout');
|
|
53
|
+
I.fillField('Card number', '4111111111111111');
|
|
54
|
+
I.fillField('Expiry', '12/25');
|
|
55
|
+
I.click('Pay');
|
|
56
|
+
I.see('Order confirmed');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// AVOID: One giant step
|
|
60
|
+
Scenario('checkout flow', ({ I }) => {
|
|
61
|
+
I.amOnPage('/cart');
|
|
62
|
+
I.click('Proceed to checkout');
|
|
63
|
+
I.fillField('Card number', '4111111111111111');
|
|
64
|
+
I.fillField('Expiry', '12/25');
|
|
65
|
+
I.click('Pay');
|
|
66
|
+
I.see('Order confirmed');
|
|
67
|
+
// All in one — hard to debug which step failed
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Use Page Objects for Complex Flows
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// Extract repeated flows to Page Objects
|
|
75
|
+
const { I, checkoutPage } = inject();
|
|
76
|
+
|
|
77
|
+
Scenario('checkout', () => {
|
|
78
|
+
checkoutPage.addItem('Product A');
|
|
79
|
+
checkoutPage.proceedToPayment();
|
|
80
|
+
checkoutPage.payWithCard('4111111111111111', '12/25');
|
|
81
|
+
I.see('Order confirmed');
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Helper Selection
|
|
86
|
+
|
|
87
|
+
| Helper | When to Use |
|
|
88
|
+
|--------|-------------|
|
|
89
|
+
| **Playwright** | Modern apps, multi-browser, trace/video, auto-wait |
|
|
90
|
+
| **WebDriver** | Selenium grid, cloud providers, legacy browsers |
|
|
91
|
+
| **Puppeteer** | Chrome-only, lightweight, fast |
|
|
92
|
+
|
|
93
|
+
Choose based on project constraints (browser support, CI, existing stack).
|
|
94
|
+
|
|
95
|
+
## BDD Best Practices
|
|
96
|
+
|
|
97
|
+
### Keep Feature Files Business-Focused
|
|
98
|
+
|
|
99
|
+
```gherkin
|
|
100
|
+
# GOOD: Business language
|
|
101
|
+
Feature: Checkout
|
|
102
|
+
As a customer I want to checkout my cart
|
|
103
|
+
|
|
104
|
+
Scenario: apply discount
|
|
105
|
+
Given I have products totaling $50 in my cart
|
|
106
|
+
When I apply coupon "SAVE10"
|
|
107
|
+
Then my total should be $45
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
```gherkin
|
|
111
|
+
# AVOID: Technical implementation details
|
|
112
|
+
Feature: Checkout
|
|
113
|
+
Scenario: apply discount
|
|
114
|
+
Given I am on /cart
|
|
115
|
+
And I click .coupon-input
|
|
116
|
+
And I type SAVE10
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Use Background for Common Setup
|
|
120
|
+
|
|
121
|
+
```gherkin
|
|
122
|
+
Feature: Dashboard
|
|
123
|
+
|
|
124
|
+
Background:
|
|
125
|
+
Given I am logged in as administrator
|
|
126
|
+
|
|
127
|
+
Scenario: view reports
|
|
128
|
+
When I open reports page
|
|
129
|
+
Then I should see sales report
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Use Scenario Outline for Data Variations
|
|
133
|
+
|
|
134
|
+
```gherkin
|
|
135
|
+
Scenario Outline: login with role
|
|
136
|
+
Given I am on login page
|
|
137
|
+
When I login as "<user>" with "<password>"
|
|
138
|
+
Then I should see "<welcome>" message
|
|
139
|
+
Examples:
|
|
140
|
+
| user | password | welcome |
|
|
141
|
+
| admin | admin123 | Admin |
|
|
142
|
+
| user | user123 | User |
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Data-Driven vs Gherkin
|
|
146
|
+
|
|
147
|
+
| Approach | Use When |
|
|
148
|
+
|----------|----------|
|
|
149
|
+
| **Data().Scenario** | Same flow, different data; technical tests |
|
|
150
|
+
| **Scenario Outline** | BDD; business examples; readable to stakeholders |
|
|
151
|
+
|
|
152
|
+
## Stability and Flakiness
|
|
153
|
+
|
|
154
|
+
| Practice | Description |
|
|
155
|
+
|----------|-------------|
|
|
156
|
+
| **Stable selectors** | Prefer label, `data-test`, `data-qa` over CSS |
|
|
157
|
+
| **Avoid I.wait(ms)** | Use `I.waitForVisible`, `I.waitForElement` when needed |
|
|
158
|
+
| **Isolation** | Each scenario independent; use `restart: 'context'` |
|
|
159
|
+
| **No shared state** | Don't rely on order; use Background/login for setup |
|
|
160
|
+
|
|
161
|
+
## Custom Helpers for Reuse
|
|
162
|
+
|
|
163
|
+
Extract cross-cutting logic:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// helpers/DbHelper.ts
|
|
167
|
+
async haveUser(email: string) {
|
|
168
|
+
// Create user in DB
|
|
169
|
+
return { id, email };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// In test
|
|
173
|
+
const { I, DbHelper } = inject();
|
|
174
|
+
Scenario('test', async () => {
|
|
175
|
+
const user = await DbHelper.haveUser('test@example.com');
|
|
176
|
+
I.amOnPage(`/user/${user.id}`);
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Debugging
|
|
181
|
+
|
|
182
|
+
| Tool | Use |
|
|
183
|
+
|------|-----|
|
|
184
|
+
| `pause()` | Interactive console; inspect state, run I.* commands |
|
|
185
|
+
| `--steps` | Step-by-step output in console |
|
|
186
|
+
| `--debug` | Debug mode with detailed output |
|
|
187
|
+
| `screenshotOnFail` | Auto-screenshot on failure |
|
|
188
|
+
|
|
189
|
+
## File Organization
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
tests/
|
|
193
|
+
login_test.ts
|
|
194
|
+
checkout_test.ts
|
|
195
|
+
features/
|
|
196
|
+
login.feature
|
|
197
|
+
checkout.feature
|
|
198
|
+
step_definitions/
|
|
199
|
+
steps.ts
|
|
200
|
+
checkout_steps.ts
|
|
201
|
+
pages/
|
|
202
|
+
LoginPage.ts
|
|
203
|
+
CheckoutPage.ts
|
|
204
|
+
helpers/
|
|
205
|
+
MyHelper.ts
|
|
206
|
+
output/ # Screenshots, videos, traces
|
|
207
|
+
```
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# CodeceptJS Configuration Guide
|
|
2
|
+
|
|
3
|
+
Configuration for `codecept.conf.ts` (or `.js`) and related setup.
|
|
4
|
+
|
|
5
|
+
## Basic Structure
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// codecept.conf.ts
|
|
9
|
+
import { Config } from 'codeceptjs';
|
|
10
|
+
|
|
11
|
+
const config: Config = {
|
|
12
|
+
tests: './tests/**/*_test.ts',
|
|
13
|
+
output: './output',
|
|
14
|
+
helpers: {
|
|
15
|
+
Playwright: {
|
|
16
|
+
url: 'http://localhost:3000',
|
|
17
|
+
show: false,
|
|
18
|
+
browser: 'chromium',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
include: {
|
|
22
|
+
I: './steps_file.ts',
|
|
23
|
+
loginPage: './pages/LoginPage.ts',
|
|
24
|
+
},
|
|
25
|
+
mocha: {},
|
|
26
|
+
bootstrap: null,
|
|
27
|
+
timeout: null,
|
|
28
|
+
teardown: null,
|
|
29
|
+
hooks: [],
|
|
30
|
+
gherkin: {
|
|
31
|
+
features: './features/**/*.feature',
|
|
32
|
+
steps: ['./step_definitions/steps.ts'],
|
|
33
|
+
},
|
|
34
|
+
plugins: {
|
|
35
|
+
screenshotOnFail: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
stepTimeout: 0,
|
|
40
|
+
stepTimeoutOverride: [
|
|
41
|
+
{
|
|
42
|
+
pattern: 'wait.*',
|
|
43
|
+
timeout: 0,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
name: 'my-app',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export = config;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Helpers
|
|
53
|
+
|
|
54
|
+
### Playwright Helper
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
helpers: {
|
|
58
|
+
Playwright: {
|
|
59
|
+
url: 'http://localhost:3000',
|
|
60
|
+
show: false,
|
|
61
|
+
browser: 'chromium', // or 'firefox', 'webkit'
|
|
62
|
+
restart: 'context', // 'context' | 'session' | 'browser'
|
|
63
|
+
waitForNavigation: 'load',
|
|
64
|
+
waitForAction: 100,
|
|
65
|
+
timeout: 10000,
|
|
66
|
+
video: false,
|
|
67
|
+
trace: false,
|
|
68
|
+
keepVideoForPassedTests: false,
|
|
69
|
+
recordHar: false,
|
|
70
|
+
storageState: 'auth.json', // Reuse auth state
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| Option | Description | Values |
|
|
76
|
+
|--------|-------------|--------|
|
|
77
|
+
| `url` | Base URL | `'http://localhost:3000'` |
|
|
78
|
+
| `browser` | Browser to use | `'chromium'`, `'firefox'`, `'webkit'` |
|
|
79
|
+
| `restart` | Restart strategy | `'context'`, `'session'`, `'browser'` |
|
|
80
|
+
| `video` | Record failed tests | `true` / `false` |
|
|
81
|
+
| `trace` | Enable trace recording | `true` / `false` |
|
|
82
|
+
| `storageState` | Auth state file | Path to JSON file |
|
|
83
|
+
|
|
84
|
+
### WebDriver Helper
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
helpers: {
|
|
88
|
+
WebDriver: {
|
|
89
|
+
url: 'http://localhost:3000',
|
|
90
|
+
browser: 'chrome',
|
|
91
|
+
host: 'localhost',
|
|
92
|
+
port: 4444,
|
|
93
|
+
restart: true,
|
|
94
|
+
smartWait: 5000,
|
|
95
|
+
waitForTimeout: 10000,
|
|
96
|
+
desiredCapabilities: {},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Puppeteer Helper
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
helpers: {
|
|
105
|
+
Puppeteer: {
|
|
106
|
+
url: 'http://localhost:3000',
|
|
107
|
+
show: false,
|
|
108
|
+
restart: true,
|
|
109
|
+
waitForNavigation: 'networkidle0',
|
|
110
|
+
waitForAction: 100,
|
|
111
|
+
chrome: {
|
|
112
|
+
args: ['--no-sandbox'],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Include (Page Objects and Steps)
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
include: {
|
|
122
|
+
I: './steps_file.ts',
|
|
123
|
+
loginPage: './pages/LoginPage.ts',
|
|
124
|
+
dashboardPage: './pages/DashboardPage.ts',
|
|
125
|
+
},
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- `I` — Custom steps file extending `I` object
|
|
129
|
+
- Other keys — Page Objects or custom objects injected via `inject()`
|
|
130
|
+
|
|
131
|
+
## Gherkin Configuration
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
gherkin: {
|
|
135
|
+
features: './features/**/*.feature',
|
|
136
|
+
steps: [
|
|
137
|
+
'./step_definitions/steps.ts',
|
|
138
|
+
'./step_definitions/checkout_steps.ts',
|
|
139
|
+
],
|
|
140
|
+
avoidDuplicateSteps: true,
|
|
141
|
+
},
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Plugins
|
|
145
|
+
|
|
146
|
+
### Built-in Plugins
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
plugins: {
|
|
150
|
+
screenshotOnFail: {
|
|
151
|
+
enabled: true,
|
|
152
|
+
uniqueScreenshotNames: true,
|
|
153
|
+
},
|
|
154
|
+
retryFailedStep: {
|
|
155
|
+
enabled: true,
|
|
156
|
+
retries: 3,
|
|
157
|
+
},
|
|
158
|
+
tryTo: {
|
|
159
|
+
enabled: true,
|
|
160
|
+
},
|
|
161
|
+
retryTo: {
|
|
162
|
+
enabled: true,
|
|
163
|
+
retries: 3,
|
|
164
|
+
},
|
|
165
|
+
stepByStepReport: {
|
|
166
|
+
enabled: true,
|
|
167
|
+
output: './output',
|
|
168
|
+
},
|
|
169
|
+
autoLogin: {
|
|
170
|
+
enabled: true,
|
|
171
|
+
inject: 'login',
|
|
172
|
+
users: {
|
|
173
|
+
admin: {
|
|
174
|
+
login: (I) => {
|
|
175
|
+
I.amOnPage('/login');
|
|
176
|
+
I.fillField('Username', 'admin');
|
|
177
|
+
I.fillField('Password', 'admin123');
|
|
178
|
+
I.click('Sign In');
|
|
179
|
+
},
|
|
180
|
+
check: (I) => {
|
|
181
|
+
I.see('Dashboard');
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### autoLogin Plugin
|
|
190
|
+
|
|
191
|
+
Eliminates repeated login steps in scenarios:
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// Enable in plugins
|
|
195
|
+
autoLogin: {
|
|
196
|
+
enabled: true,
|
|
197
|
+
inject: 'login',
|
|
198
|
+
users: {
|
|
199
|
+
admin: {
|
|
200
|
+
login: (I) => {
|
|
201
|
+
I.amOnPage('/login');
|
|
202
|
+
I.fillField('Username', 'admin');
|
|
203
|
+
I.fillField('Password', 'admin123');
|
|
204
|
+
I.click('Sign In');
|
|
205
|
+
},
|
|
206
|
+
check: (I) => {
|
|
207
|
+
I.see('Dashboard');
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
// In test
|
|
214
|
+
Scenario('admin flow', ({ I, login }) => {
|
|
215
|
+
login('admin');
|
|
216
|
+
I.amOnPage('/settings');
|
|
217
|
+
I.see('Settings');
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Output and Reports
|
|
222
|
+
|
|
223
|
+
| Option | Description |
|
|
224
|
+
|--------|-------------|
|
|
225
|
+
| `output` | Directory for screenshots, videos, traces |
|
|
226
|
+
| `stepByStepReport` | Human-readable step output |
|
|
227
|
+
| `mocha.reporter` | Mocha reporter (e.g., `'spec'`) |
|
|
228
|
+
|
|
229
|
+
## Test Discovery
|
|
230
|
+
|
|
231
|
+
| Option | Description | Example |
|
|
232
|
+
|--------|-------------|---------|
|
|
233
|
+
| `tests` | Glob for test files | `'./tests/**/*_test.ts'` |
|
|
234
|
+
| `gherkin.features` | Glob for feature files | `'./features/**/*.feature'` |
|
|
235
|
+
|
|
236
|
+
## Bootstrap and Teardown
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
bootstrap: './bootstrap.ts',
|
|
240
|
+
teardown: './teardown.ts',
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## CLI Options
|
|
244
|
+
|
|
245
|
+
| Command | Description |
|
|
246
|
+
|---------|-------------|
|
|
247
|
+
| `npx codeceptjs run` | Run all tests |
|
|
248
|
+
| `npx codeceptjs run --steps` | Show step-by-step output |
|
|
249
|
+
| `npx codeceptjs run --debug` | Debug mode |
|
|
250
|
+
| `npx codeceptjs run --features` | Run only feature files |
|
|
251
|
+
| `npx codeceptjs run --tests` | Run only JS/TS tests |
|
|
252
|
+
| `npx codeceptjs run --grep "login"` | Run tests matching pattern |
|
|
253
|
+
| `npx codeceptjs gherkin:init` | Initialize Gherkin |
|
|
254
|
+
| `npx codeceptjs gherkin:snippets` | Generate step definition stubs |
|
|
255
|
+
| `npx codeceptjs gherkin:steps` | List defined steps |
|