qa-skills 3.0.0 → 3.1.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.
Files changed (262) hide show
  1. package/README.md +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
@@ -1,62 +0,0 @@
1
- # Vitest Best Practices
2
-
3
- ## Test Structure
4
-
5
- 1. **One assertion focus per test** — Prefer narrow tests; use multiple `it` blocks instead of one test with many assertions when behaviors differ.
6
- 2. **Descriptive names** — Test names should read like specs: `it('returns 404 when user not found', ...)`.
7
- 3. **Arrange-Act-Assert** — Structure tests: setup → call code under test → assert.
8
-
9
- ## Mocking
10
-
11
- 1. **Prefer vi.spyOn when possible** — More type-safe and flexible than full module replacement.
12
- 2. **Use vi.hoisted for ESM** — When `vi.mock` factory needs variables, define them with `vi.hoisted()`.
13
- 3. **Reset mocks between tests** — Use `beforeEach(() => vi.clearAllMocks())` to avoid cross-test pollution.
14
- 4. **Mock at the boundary** — Mock external services (HTTP, DB), not internal implementation details.
15
-
16
- ## Isolation
17
-
18
- 1. **No shared mutable state** — Each test should be independent; use `beforeEach` for fresh state.
19
- 2. **Concurrent tests** — Use `it.concurrent` only when tests have no shared state.
20
- 3. **Clean up** — Restore spies, clear timers, reset env in `afterEach` when needed.
21
-
22
- ## Assertions
23
-
24
- 1. **Prefer specific assertions** — Use `toBe(5)` over `toBeTruthy()` when the value matters.
25
- 2. **Use toStrictEqual for objects** — Catches `undefined` vs missing key differences.
26
- 3. **Avoid snapshot overuse** — Use for stable, structured output; avoid for frequently changing UI.
27
-
28
- ## Performance
29
-
30
- 1. **Exclude unnecessary files** — Ensure `node_modules`, `dist`, and non-test paths are excluded.
31
- 2. **Use workspace for monorepos** — Split projects to parallelize and scope config.
32
- 3. **Mock heavy dependencies** — Don't load real DBs, external APIs, or large libs in unit tests.
33
-
34
- ## Migration from Jest
35
-
36
- ### API Mapping
37
-
38
- | Jest | Vitest |
39
- | ---- | ------ |
40
- | `jest.mock()` | `vi.mock()` |
41
- | `jest.fn()` | `vi.fn()` |
42
- | `jest.spyOn()` | `vi.spyOn()` |
43
- | `jest.useFakeTimers()` | `vi.useFakeTimers()` |
44
- | `jest.runAllTimers()` | `vi.runAllTimers()` |
45
- | `jest.setSystemTime()` | `vi.setSystemTime()` |
46
- | `jest.resetModules()` | `vi.resetModules()` |
47
-
48
- ### Key Differences
49
-
50
- 1. **ESM by default** — Vitest is ESM-native; use `import`/`export`. For `vi.mock` factory variables, use `vi.hoisted()`.
51
- 2. **Config** — Vitest uses `vitest.config.ts` or `vite.config.ts` with a `test` block, not `jest.config.js`.
52
- 3. **Globals** — Enable `globals: true` for `describe`, `it`, `expect`, `vi` without imports.
53
- 4. **Coverage** — Use `@vitest/coverage-v8` or `@vitest/coverage-istanbul`; configure under `test.coverage`.
54
-
55
- ### Migration Steps
56
-
57
- 1. Install Vitest: `npm i -D vitest`
58
- 2. Add `vitest.config.ts` (or `test` block to `vite.config.ts`)
59
- 3. Replace `jest` with `vi` in test files
60
- 4. Update `package.json` scripts: `"test": "vitest"`
61
- 5. Fix ESM issues: add `vi.hoisted()` where `vi.mock` needs variables
62
- 6. Run tests and fix any environment or config differences
@@ -1,127 +0,0 @@
1
- # Vitest Configuration
2
-
3
- ## Basic vitest.config.ts
4
-
5
- ```ts
6
- import { defineConfig } from 'vitest/config'
7
- import tsconfigPaths from 'vite-tsconfig-paths'
8
-
9
- export default defineConfig({
10
- plugins: [tsconfigPaths()],
11
- test: {
12
- globals: true,
13
- environment: 'node',
14
- include: ['src/**/*.{test,spec}.{ts,tsx}', 'tests/**/*.{test,spec}.{ts,tsx}'],
15
- exclude: ['node_modules', 'dist'],
16
- },
17
- })
18
- ```
19
-
20
- ## Vite Config Integration
21
-
22
- When using Vite for the app, add a `test` block to `vite.config.ts`:
23
-
24
- ```ts
25
- import { defineConfig } from 'vite'
26
- import react from '@vitejs/plugin-react'
27
-
28
- export default defineConfig({
29
- plugins: [react()],
30
- test: {
31
- globals: true,
32
- environment: 'jsdom',
33
- setupFiles: ['./tests/setup.ts'],
34
- include: ['src/**/*.{test,spec}.{ts,tsx}'],
35
- },
36
- })
37
- ```
38
-
39
- ## Environment
40
-
41
- | Value | Use Case |
42
- | ----- | -------- |
43
- | `node` | Node.js APIs, backend, CLI |
44
- | `jsdom` | DOM APIs, React, Vue (browser-like) |
45
- | `happy-dom` | Lighter DOM alternative |
46
- | `edge-runtime` | Edge workers |
47
- | Custom | Path to custom env file |
48
-
49
- ## Coverage
50
-
51
- ### v8 (recommended)
52
-
53
- ```ts
54
- // vitest.config.ts
55
- export default defineConfig({
56
- test: {
57
- coverage: {
58
- provider: 'v8',
59
- reporter: ['text', 'json', 'html'],
60
- include: ['src/**/*.ts'],
61
- exclude: ['src/**/*.test.ts', 'src/**/*.spec.ts'],
62
- },
63
- },
64
- })
65
- ```
66
-
67
- Install: `npm i -D @vitest/coverage-v8`
68
-
69
- ### Istanbul
70
-
71
- ```ts
72
- coverage: {
73
- provider: 'istanbul',
74
- reporter: ['text', 'lcov', 'html'],
75
- }
76
- ```
77
-
78
- Install: `npm i -D @vitest/coverage-istanbul`
79
-
80
- ## Workspace (Monorepo)
81
-
82
- ```ts
83
- // vitest.workspace.ts
84
- import { defineWorkspace } from 'vitest/config'
85
-
86
- export default defineWorkspace([
87
- 'packages/core',
88
- 'packages/utils',
89
- 'apps/web',
90
- ])
91
- ```
92
-
93
- Each workspace project can define its own `vitest.config.ts` or `vite.config.ts`.
94
-
95
- ## Setup Files
96
-
97
- Run code before all tests:
98
-
99
- ```ts
100
- test: {
101
- setupFiles: ['./tests/setup.ts'],
102
- globalSetup: './tests/globalSetup.ts',
103
- }
104
- ```
105
-
106
- - `setupFiles`: Runs in each test environment (e.g., per worker)
107
- - `globalSetup`: Runs once before all tests
108
-
109
- ## Plugins
110
-
111
- Common plugins:
112
-
113
- - `vite-tsconfig-paths` — Resolve `@/` and tsconfig paths
114
- - `@vitest/coverage-v8` — Coverage
115
- - `@vitest/ui` — Browser UI for test runs
116
-
117
- ## Common Options
118
-
119
- | Option | Description |
120
- | ------ | ----------- |
121
- | `globals` | Expose `describe`, `it`, `expect`, `vi` globally |
122
- | `unstubEnvs` | Reset `vi.stubEnv` between tests |
123
- | `unstubGlobals` | Reset `vi.stubGlobal` between tests |
124
- | `pool` | `threads` (default) or `forks` |
125
- | `poolMatchGlobs` | Limit which files run in which pool |
126
- | `testTimeout` | Default timeout per test (ms) |
127
- | `hookTimeout` | Timeout for before/after hooks (ms) |
@@ -1,141 +0,0 @@
1
- # Vitest Test Patterns
2
-
3
- ## ESM Mocking
4
-
5
- ### vi.mock() Hoisting
6
-
7
- `vi.mock()` is **hoisted** to the top of the file and runs before all imports. Variables used in the factory must be defined via `vi.hoisted()`:
8
-
9
- ```ts
10
- import { vi } from 'vitest'
11
-
12
- const mockFn = vi.hoisted(() => vi.fn())
13
-
14
- vi.mock('./my-module', () => ({
15
- myFunction: mockFn,
16
- }))
17
- ```
18
-
19
- ### vi.spyOn vs vi.mock
20
-
21
- | Use Case | Prefer | Reason |
22
- | -------- | ------ | ------ |
23
- | Replace entire module | `vi.mock()` | Full substitution |
24
- | Spy on single export | `vi.spyOn(exports, 'name')` | Type-safe, flexible |
25
- | Partial mock (keep some exports) | `vi.mock` with `importOriginal` | Merge original + overrides |
26
- | Browser mode | `vi.mock` (vi.spyOn has limitations) | See Vitest browser docs |
27
-
28
- ### Partial Module Mock
29
-
30
- ```ts
31
- vi.mock('./some-path.js', async (importOriginal) => {
32
- const mod = await importOriginal<typeof import('./some-path.js')>()
33
- return {
34
- ...mod,
35
- mockedExport: vi.fn(),
36
- }
37
- })
38
- ```
39
-
40
- ## In-Source Testing
41
-
42
- ### Layout Options
43
-
44
- | Layout | Path | Use Case |
45
- | ------ | ---- | -------- |
46
- | Colocated | `src/utils/__tests__/format.test.ts` | Unit tests next to source |
47
- | Suffix | `src/utils/format.test.ts` | Same directory, suffix |
48
- | Separate | `tests/unit/utils/format.test.ts` | Centralized test dir |
49
-
50
- ### Config for In-Source
51
-
52
- ```ts
53
- // vitest.config.ts
54
- export default defineConfig({
55
- test: {
56
- include: ['src/**/*.{test,spec}.{ts,tsx}', 'tests/**/*.{test,spec}.{ts,tsx}'],
57
- exclude: ['node_modules', 'dist'],
58
- },
59
- })
60
- ```
61
-
62
- ## Concurrent Tests
63
-
64
- Run tests in parallel within a file:
65
-
66
- ```ts
67
- it.concurrent('test 1', async () => { /* ... */ })
68
- it.concurrent('test 2', async () => { /* ... */ })
69
-
70
- // Or with test.each
71
- it.concurrent.each([
72
- [1, 2, 3],
73
- [4, 5, 9],
74
- ])('adds %i + %i = %i', async (a, b, expected) => {
75
- expect(a + b).toBe(expected)
76
- })
77
- ```
78
-
79
- **Caveats:** Avoid shared mutable state; each concurrent test should be independent.
80
-
81
- ## Workspace Testing (Monorepos)
82
-
83
- Use `vitest.workspace.ts` to define multiple projects:
84
-
85
- ```ts
86
- // vitest.workspace.ts
87
- import { defineWorkspace } from 'vitest/config'
88
-
89
- export default defineWorkspace([
90
- 'packages/*',
91
- 'apps/*',
92
- ])
93
- ```
94
-
95
- Each workspace entry can have its own `vitest.config.ts` or `vite.config.ts` with a `test` block.
96
-
97
- ## Parameterized Tests (test.each)
98
-
99
- ```ts
100
- test.each([
101
- { a: 1, b: 2, expected: 3 },
102
- { a: 0, b: 0, expected: 0 },
103
- ])('adds $a + $b = $expected', ({ a, b, expected }) => {
104
- expect(a + b).toBe(expected)
105
- })
106
-
107
- // Array of arrays
108
- test.each([
109
- [1, 2, 3],
110
- [4, 5, 9],
111
- ])('adds %i + %i = %i', (a, b, expected) => {
112
- expect(a + b).toBe(expected)
113
- })
114
- ```
115
-
116
- ## Snapshot Testing
117
-
118
- ```ts
119
- expect(obj).toMatchSnapshot()
120
- expect(html).toMatchInlineSnapshot(`<div>...</div>`)
121
- ```
122
-
123
- Use inline snapshots for small, stable outputs; file snapshots for larger structures.
124
-
125
- ## Setup and Teardown
126
-
127
- ```ts
128
- beforeAll(() => { /* once per describe */ })
129
- afterAll(() => { /* once per describe */ })
130
- beforeEach(() => { /* before each it */ })
131
- afterEach(() => { /* after each it */ })
132
- ```
133
-
134
- Reset mocks in `beforeEach` to avoid cross-test pollution:
135
-
136
- ```ts
137
- beforeEach(() => {
138
- vi.clearAllMocks()
139
- // or vi.restoreAllMocks() to restore original implementations
140
- })
141
- ```
@@ -1,145 +0,0 @@
1
- ---
2
- name: qa-webdriverio-writer
3
- description: Generate WebdriverIO E2E and mobile web tests for TypeScript using W3C WebDriver protocol with multi-browser support, Appium integration, and Page Object pattern.
4
- output_dir: tests/e2e
5
- ---
6
-
7
- # QA WebdriverIO Writer
8
-
9
- ## Purpose
10
-
11
- Write WebdriverIO E2E and mobile web tests from test case specifications. Transform structured test cases into executable TypeScript test files using the W3C WebDriver protocol, multi-browser support, Appium for mobile web, and the Page Object pattern.
12
-
13
- ## Trigger Phrases
14
-
15
- - "Write WebdriverIO tests for [feature/flow]"
16
- - "Generate WebdriverIO E2E tests from test cases"
17
- - "Create WebdriverIO tests with Page Objects"
18
- - "Add WebdriverIO mobile web tests"
19
- - "WebdriverIO tests for [URL/flow]"
20
- - "Multi-browser WebdriverIO tests"
21
- - "Appium + WebdriverIO tests for mobile web"
22
- - "WDIO tests with custom commands"
23
-
24
- ## Workflow
25
-
26
- 1. **Read test cases** — From qa-testcase-from-docs, qa-manual-test-designer, qa-browser-data-collector
27
- 2. **Analyze target** — Page structure, selectors, mobile vs desktop
28
- 3. **Generate test files** — Create `*.spec.ts` in `test/specs/` or project convention
29
- 4. **Add Page Objects** — Encapsulate selectors and actions in `pageobjects/`
30
- 5. **Configure wdio.conf.ts** — Capabilities, services, reporters
31
-
32
- ## Key Features
33
-
34
- - **W3C WebDriver protocol** — Standard browser automation
35
- - **Multi-browser** — Chrome, Firefox, Safari, Edge via capabilities
36
- - **Appium integration** — Mobile web testing (iOS Safari, Android Chrome)
37
- - **Page Object pattern** — Encapsulate page logic, reusable selectors
38
- - **Built-in wait strategies** — `waitForDisplayed`, `waitForClickable`, `waitForExist`
39
- - **WDIO test runner** — Parallel execution, retries, reporters
40
-
41
- ## Test Types
42
-
43
- | Type | Scope | Approach |
44
- |------|-------|----------|
45
- | **E2E** | Full user flows, page navigation | browser.url, $(), $$(), click, setValue, getText |
46
- | **Mobile Web** | Mobile browser testing | Appium service, mobile capabilities, viewport |
47
-
48
- ## E2E Testing
49
-
50
- - **Navigation:** `browser.url()`, `browser.back()`, `browser.refresh()`
51
- - **Selectors:** `$('selector')` single element, `$$('selector')` element array
52
- - **Actions:** `.click()`, `.setValue()`, `.addValue()`, `.clearValue()`, `.selectByVisibleText()`
53
- - **Getters:** `.getText()`, `.getAttribute()`, `.getValue()`, `.isDisplayed()`
54
- - **Waits:** `.waitForDisplayed()`, `.waitForClickable()`, `.waitForExist()`, `browser.waitUntil()`
55
-
56
- See `references/patterns.md` for selectors, waits, Page Objects, custom commands, file upload, multiremote.
57
-
58
- ## Page Object Pattern
59
-
60
- - **Base page:** Shared selectors, navigation helpers, common actions
61
- - **Page-specific:** Extend base; encapsulate page-specific locators and methods
62
- - **WDIO Page Object** — Use `get` getters for lazy element resolution
63
-
64
- See `references/best-practices.md` for Page Object structure.
65
-
66
- ## Key Patterns
67
-
68
- - **Structure:** `describe` / `it`, `before` / `after`, `beforeEach` / `afterEach`
69
- - **Selectors:** CSS, XPath, accessibility (aria), data attributes
70
- - **Assertions:** `expect()` (Chai/Expect), `browser.assert` (if using expect-webdriverio)
71
- - **Custom commands:** `browser.addCommand()` for reusable actions
72
- - **Multiremote:** Run same test across multiple browsers in parallel
73
-
74
- ## Services
75
-
76
- | Service | Purpose |
77
- |---------|---------|
78
- | `@wdio/local-runner` | Local test execution |
79
- | `@wdio/mocha-framework` | Mocha describe/it (or Jasmine, Cucumber) |
80
- | `wdio-chromedriver-service` | ChromeDriver for Chrome |
81
- | `@wdio/appium-service` | Appium for mobile web |
82
- | `@wdio/selenium-standalone-service` | Selenium Grid / standalone |
83
-
84
- ## Configuration
85
-
86
- - **wdio.conf.ts** — Capabilities, services, framework, reporters, specs
87
- - **Multi-capability** — Run same tests on multiple browsers
88
- - **Environment-specific** — baseUrl, timeouts via config
89
-
90
- See `references/config.md` for full configuration guide.
91
-
92
- ## Context7 MCP
93
-
94
- Uses Context7 MCP to fetch WebdriverIO documentation when needed. Query for WebdriverIO API, selectors, or configuration when patterns are unclear.
95
-
96
- ## Scope
97
-
98
- **Can do (autonomous):**
99
- - Generate WebdriverIO E2E and mobile web tests from test cases
100
- - Apply Page Object pattern with getters and methods
101
- - Add custom commands via `browser.addCommand()`
102
- - Configure wdio.conf.ts (capabilities, services, reporters)
103
- - Use multiremote for parallel browser testing
104
- - Use Context7 MCP for WebdriverIO docs
105
-
106
- **Cannot do (requires confirmation):**
107
- - Change production code structure
108
- - Add dependencies not in package.json
109
- - Override project WDIO config without approval
110
- - Modify Appium server configuration
111
-
112
- **Will not do (out of scope):**
113
- - Execute tests (user runs `npx wdio run wdio.conf.ts`)
114
- - Write Jest/Vitest unit tests (use qa-jest-writer)
115
- - Modify CI/CD pipelines
116
- - Native mobile app testing (Appium native, not mobile web)
117
-
118
- ## References
119
-
120
- - `references/patterns.md` — Selectors, waits, Page Objects, custom commands, file upload, multiremote
121
- - `references/config.md` — wdio.conf.ts, capabilities, services, reporters
122
- - `references/best-practices.md` — Stable selectors, wait strategies, Page Objects, parallel execution
123
-
124
- ## Quality Checklist
125
-
126
- - [ ] Explicit waits used; avoid `browser.pause()` in committed code
127
- - [ ] Page Object pattern applied for page-specific logic
128
- - [ ] Stable selectors (data-testid, aria, semantic over brittle CSS)
129
- - [ ] Tests independent (no shared state, order-independent)
130
- - [ ] Proper teardown (afterEach, cleanup)
131
- - [ ] Traceability to test case IDs where applicable
132
- - [ ] No hardcoded secrets (use env vars)
133
- - [ ] Capabilities match target browsers
134
-
135
- ## Troubleshooting
136
-
137
- | Symptom | Likely Cause | Fix |
138
- |---------|--------------|-----|
139
- | Element not found | Selector too specific, timing | Use data-testid; add waitForDisplayed before action |
140
- | Stale element | DOM changed after query | Re-query element; use getters in Page Objects |
141
- | Timeout on wait | Element never meets condition | Verify selector; check overlays, iframes |
142
- | Multiremote fails | Capability mismatch | Ensure all browsers support same commands |
143
- | Appium not starting | Service/config issue | Check @wdio/appium-service; verify Appium installed |
144
- | ChromeDriver version mismatch | Chrome updated | Update wdio-chromedriver-service or chromedriver |
145
- | Flaky tests | Race conditions | Use waitForDisplayed/waitForClickable; avoid fixed delays |
@@ -1,176 +0,0 @@
1
- # WebdriverIO Best Practices
2
-
3
- ## Stable Selectors
4
-
5
- ### Prefer Data Attributes
6
-
7
- ```typescript
8
- // Good — test-specific, stable
9
- await $('[data-testid="submit-btn"]').click();
10
- await $('[data-testid="email-input"]').setValue('user@example.com');
11
-
12
- // Avoid — brittle
13
- await $('.btn-primary').click();
14
- await $('#email').setValue('user@example.com');
15
- await $('div > form > div:nth-child(2) > input').setValue('user@example.com');
16
- ```
17
-
18
- Add `data-testid` to production markup or recommend adding to the app. Avoid relying on CSS classes, IDs, or DOM structure that may change with refactors.
19
-
20
- ### Selector Priority
21
-
22
- 1. **data-testid** — Explicit, stable, test-specific
23
- 2. **Semantic attributes** — name, aria-label, role
24
- 3. **Stable IDs** — IDs that won't change
25
- 4. **CSS** — Simple, meaningful classes
26
- 5. **XPath** — Last resort; use for text when necessary
27
-
28
- ---
29
-
30
- ## Wait Strategies
31
-
32
- ### Use Explicit Waits
33
-
34
- ```typescript
35
- // Good — wait for condition
36
- await $('#results').waitForDisplayed({ timeout: 5000 });
37
- await $('#loading').waitForExist({ reverse: true });
38
- await $('button').waitForClickable();
39
-
40
- // Bad — arbitrary delay
41
- await browser.pause(3000);
42
- ```
43
-
44
- ### waitUntil for Custom Conditions
45
-
46
- ```typescript
47
- await browser.waitUntil(
48
- async () => (await $('#status').getText()) === 'Complete',
49
- { timeout: 10000, interval: 500, timeoutMsg: 'Status never became Complete' }
50
- );
51
- ```
52
-
53
- ### Assertions Include Implicit Waits
54
-
55
- WebdriverIO assertions retry until timeout:
56
-
57
- ```typescript
58
- await expect($('#results')).toBeDisplayed();
59
- await expect($('h1')).toHaveText('Welcome');
60
- ```
61
-
62
- ---
63
-
64
- ## Page Object Pattern
65
-
66
- ### Structure
67
-
68
- ```
69
- test/
70
- specs/
71
- login.spec.ts
72
- pages/
73
- BasePage.ts
74
- LoginPage.ts
75
- DashboardPage.ts
76
- ```
77
-
78
- ### Encapsulation
79
-
80
- - **One page object per page/screen** — Encapsulate selectors and actions
81
- - **Base page for shared logic** — Navigation, common helpers
82
- - **Getters for elements** — Lazy evaluation; elements resolved when used
83
- - **Methods for actions** — Reusable flows (login, fillForm, etc.)
84
-
85
- ### Avoid Logic in Tests
86
-
87
- ```typescript
88
- // Bad — implementation details in test
89
- it('logs in', async () => {
90
- await $('input[name="email"]').setValue('user@test.com');
91
- await $('input[name="password"]').setValue('secret');
92
- await $('button').click();
93
- });
94
-
95
- // Good — page object encapsulates
96
- it('logs in', async () => {
97
- await loginPage.login('user@test.com', 'secret');
98
- });
99
- ```
100
-
101
- ---
102
-
103
- ## Parallel Execution
104
-
105
- ### maxInstances
106
-
107
- ```typescript
108
- // wdio.conf.ts
109
- maxInstances: 5, // Run up to 5 specs in parallel
110
- ```
111
-
112
- ### Test Independence
113
-
114
- - Each test must run in isolation
115
- - No shared mutable state between tests
116
- - Use `beforeEach` for setup; avoid order-dependent tests
117
- - Prefer API or fixture data over UI-created state
118
-
119
- ### Sharding for CI
120
-
121
- ```bash
122
- wdio run wdio.conf.ts --shard=1/4
123
- wdio run wdio.conf.ts --shard=2/4
124
- wdio run wdio.conf.ts --shard=3/4
125
- wdio run wdio.conf.ts --shard=4/4
126
- ```
127
-
128
- ---
129
-
130
- ## Error Handling and Debugging
131
-
132
- ### Screenshots on Failure
133
-
134
- ```typescript
135
- afterTest: async function (test, context, result) {
136
- if (result.error) {
137
- await browser.takeScreenshot();
138
- }
139
- },
140
- ```
141
-
142
- ### Logs
143
-
144
- ```typescript
145
- browser.debug(); // Pause and open REPL
146
- browser.pause(5000); // Pause (avoid in production tests)
147
- ```
148
-
149
- ### Traceability
150
-
151
- Include test case IDs in describe/it names:
152
-
153
- ```typescript
154
- describe('Login [TC-001]', () => {
155
- it('displays error on invalid credentials [TC-001-01]', async () => {
156
- // ...
157
- });
158
- });
159
- ```
160
-
161
- ---
162
-
163
- ## Security and Secrets
164
-
165
- - Never hardcode credentials — use `process.env` or config
166
- - Store API keys in `.env` (gitignored)
167
- - Use `browser.addCommand` for login flows that need credentials from env
168
-
169
- ---
170
-
171
- ## Mobile Web (Appium)
172
-
173
- - Use `browser.isMobile` to branch mobile vs desktop logic when needed
174
- - Prefer touch actions for mobile: `element.touchAction('tap')` or `element.click()`
175
- - Set viewport/capabilities for target device sizes
176
- - Use Appium inspector to discover selectors on real devices/emulators