testeiya 0.10.0 → 0.10.2

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 (241) hide show
  1. package/PIPELINES.md +3 -0
  2. package/README.md +10 -20
  3. package/dist/prompt/clis.d.ts +7 -0
  4. package/dist/prompt/pipeline-report.d.ts +1 -0
  5. package/dist/prompt/report.d.ts +10 -0
  6. package/dist/prompt/system-prompt.d.ts +22 -0
  7. package/dist/prompt/system-prompt.js +1 -1
  8. package/dist/prompt/system-prompt.js.map +1 -1
  9. package/dist/prompt/testomat.io.d.ts +19 -0
  10. package/dist/prompt/thread.d.ts +73 -0
  11. package/dist/src/args.d.ts +39 -0
  12. package/dist/src/attribution-extension.d.ts +3 -0
  13. package/dist/src/checkpoint.d.ts +30 -0
  14. package/dist/src/cli.d.ts +2 -0
  15. package/dist/src/cli.js +27 -32
  16. package/dist/src/cli.js.map +1 -1
  17. package/dist/src/doctor.d.ts +11 -0
  18. package/dist/src/env.d.ts +30 -0
  19. package/dist/src/exec.d.ts +11 -0
  20. package/dist/src/git.d.ts +41 -0
  21. package/dist/src/git.js +10 -0
  22. package/dist/src/git.js.map +1 -1
  23. package/dist/src/langfuse-extension.d.ts +7 -0
  24. package/dist/src/langfuse.d.ts +67 -0
  25. package/dist/src/mcp.d.ts +19 -0
  26. package/dist/src/model.d.ts +20 -0
  27. package/dist/src/model.js +2 -0
  28. package/dist/src/model.js.map +1 -1
  29. package/dist/src/models.d.ts +1 -0
  30. package/dist/src/output.d.ts +84 -0
  31. package/dist/src/pipeline/command-stage.d.ts +12 -0
  32. package/dist/src/pipeline/crash-guard.d.ts +12 -0
  33. package/dist/src/pipeline/crash-guard.js +21 -0
  34. package/dist/src/pipeline/crash-guard.js.map +1 -0
  35. package/dist/src/pipeline/diagram.d.ts +24 -0
  36. package/dist/src/pipeline/gate.d.ts +21 -0
  37. package/dist/src/pipeline/launcher.d.ts +33 -0
  38. package/dist/src/pipeline/launcher.js +16 -3
  39. package/dist/src/pipeline/launcher.js.map +1 -1
  40. package/dist/src/pipeline/log.d.ts +29 -0
  41. package/dist/src/pipeline/log.js +9 -0
  42. package/dist/src/pipeline/log.js.map +1 -1
  43. package/dist/src/pipeline/overlay.d.ts +29 -0
  44. package/dist/src/pipeline/pipeline-file.d.ts +44 -0
  45. package/dist/src/pipeline/pipeline-file.js +16 -8
  46. package/dist/src/pipeline/pipeline-file.js.map +1 -1
  47. package/dist/src/pipeline/pipeline.d.ts +78 -0
  48. package/dist/src/pipeline/pipeline.js +33 -7
  49. package/dist/src/pipeline/pipeline.js.map +1 -1
  50. package/dist/src/pipeline/report.d.ts +26 -0
  51. package/dist/src/pipeline/report.js +13 -0
  52. package/dist/src/pipeline/report.js.map +1 -1
  53. package/dist/src/pipeline/spec.d.ts +63 -0
  54. package/dist/src/pipeline/stage-env.d.ts +13 -0
  55. package/dist/src/pipeline/stage-env.js +31 -0
  56. package/dist/src/pipeline/stage-env.js.map +1 -0
  57. package/dist/src/pipeline/stage.d.ts +71 -0
  58. package/dist/src/pipeline/stage.js.map +1 -1
  59. package/dist/src/pipeline/state.d.ts +63 -0
  60. package/dist/src/pipeline/summary-stage.d.ts +24 -0
  61. package/dist/src/pipeline/task-stage.d.ts +24 -0
  62. package/dist/src/pipeline/task-stage.js +86 -2
  63. package/dist/src/pipeline/task-stage.js.map +1 -1
  64. package/dist/src/pipeline/variables.d.ts +20 -0
  65. package/dist/src/result.d.ts +6 -0
  66. package/dist/src/run.d.ts +69 -0
  67. package/dist/src/run.js +116 -60
  68. package/dist/src/run.js.map +1 -1
  69. package/dist/src/session.d.ts +43 -0
  70. package/dist/src/session.js +3 -1
  71. package/dist/src/session.js.map +1 -1
  72. package/dist/src/sessions.d.ts +23 -0
  73. package/dist/src/skills.d.ts +29 -0
  74. package/package.json +11 -2
  75. package/pipelines/api-testing.yml +16 -5
  76. package/pipelines/issue-test-cases.yml +3 -4
  77. package/pipelines/pr-review.yml +14 -5
  78. package/pipelines/regression.yml +1 -0
  79. package/pipelines/web-testing.yml +1 -0
  80. package/prompt/system-prompt.ts +1 -1
  81. package/scripts/vendor-skills.js +62 -0
  82. package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -119
  83. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -141
  84. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -100
  85. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -196
  86. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -83
  87. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -126
  88. package/skills/codeceptjs/lint-codeceptjs-tests/SKILL.md +0 -104
  89. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -109
  90. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -295
  91. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -339
  92. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -459
  93. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -338
  94. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -78
  95. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -102
  96. package/skills/playwright/playwright-best-practices/SKILL.md +0 -303
  97. package/skills/playwright/playwright-best-practices/advanced/authentication-flows.md +0 -360
  98. package/skills/playwright/playwright-best-practices/advanced/authentication.md +0 -871
  99. package/skills/playwright/playwright-best-practices/advanced/clock-mocking.md +0 -364
  100. package/skills/playwright/playwright-best-practices/advanced/mobile-testing.md +0 -409
  101. package/skills/playwright/playwright-best-practices/advanced/multi-context.md +0 -288
  102. package/skills/playwright/playwright-best-practices/advanced/multi-user.md +0 -393
  103. package/skills/playwright/playwright-best-practices/advanced/network-advanced.md +0 -452
  104. package/skills/playwright/playwright-best-practices/advanced/third-party.md +0 -464
  105. package/skills/playwright/playwright-best-practices/architecture/pom-vs-fixtures.md +0 -363
  106. package/skills/playwright/playwright-best-practices/architecture/test-architecture.md +0 -369
  107. package/skills/playwright/playwright-best-practices/architecture/when-to-mock.md +0 -383
  108. package/skills/playwright/playwright-best-practices/browser-apis/browser-apis.md +0 -391
  109. package/skills/playwright/playwright-best-practices/browser-apis/iframes.md +0 -403
  110. package/skills/playwright/playwright-best-practices/browser-apis/service-workers.md +0 -504
  111. package/skills/playwright/playwright-best-practices/browser-apis/websockets.md +0 -403
  112. package/skills/playwright/playwright-best-practices/core/annotations.md +0 -424
  113. package/skills/playwright/playwright-best-practices/core/assertions-waiting.md +0 -361
  114. package/skills/playwright/playwright-best-practices/core/configuration.md +0 -452
  115. package/skills/playwright/playwright-best-practices/core/fixtures-hooks.md +0 -417
  116. package/skills/playwright/playwright-best-practices/core/global-setup.md +0 -434
  117. package/skills/playwright/playwright-best-practices/core/locators.md +0 -242
  118. package/skills/playwright/playwright-best-practices/core/page-object-model.md +0 -315
  119. package/skills/playwright/playwright-best-practices/core/projects-dependencies.md +0 -453
  120. package/skills/playwright/playwright-best-practices/core/test-data.md +0 -492
  121. package/skills/playwright/playwright-best-practices/core/test-suite-structure.md +0 -361
  122. package/skills/playwright/playwright-best-practices/core/test-tags.md +0 -298
  123. package/skills/playwright/playwright-best-practices/debugging/console-errors.md +0 -420
  124. package/skills/playwright/playwright-best-practices/debugging/debugging.md +0 -504
  125. package/skills/playwright/playwright-best-practices/debugging/error-testing.md +0 -360
  126. package/skills/playwright/playwright-best-practices/debugging/flaky-tests.md +0 -496
  127. package/skills/playwright/playwright-best-practices/frameworks/angular.md +0 -530
  128. package/skills/playwright/playwright-best-practices/frameworks/nextjs.md +0 -469
  129. package/skills/playwright/playwright-best-practices/frameworks/react.md +0 -531
  130. package/skills/playwright/playwright-best-practices/frameworks/vue.md +0 -574
  131. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/ci-cd.md +0 -468
  132. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/docker.md +0 -283
  133. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/github-actions.md +0 -546
  134. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/gitlab.md +0 -397
  135. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/other-providers.md +0 -521
  136. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/parallel-sharding.md +0 -371
  137. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/performance.md +0 -453
  138. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/reporting.md +0 -424
  139. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/test-coverage.md +0 -497
  140. package/skills/playwright/playwright-best-practices/testing-patterns/accessibility.md +0 -359
  141. package/skills/playwright/playwright-best-practices/testing-patterns/api-testing.md +0 -719
  142. package/skills/playwright/playwright-best-practices/testing-patterns/browser-extensions.md +0 -506
  143. package/skills/playwright/playwright-best-practices/testing-patterns/canvas-webgl.md +0 -493
  144. package/skills/playwright/playwright-best-practices/testing-patterns/component-testing.md +0 -500
  145. package/skills/playwright/playwright-best-practices/testing-patterns/drag-drop.md +0 -576
  146. package/skills/playwright/playwright-best-practices/testing-patterns/electron.md +0 -509
  147. package/skills/playwright/playwright-best-practices/testing-patterns/file-operations.md +0 -377
  148. package/skills/playwright/playwright-best-practices/testing-patterns/file-upload-download.md +0 -562
  149. package/skills/playwright/playwright-best-practices/testing-patterns/forms-validation.md +0 -561
  150. package/skills/playwright/playwright-best-practices/testing-patterns/graphql-testing.md +0 -331
  151. package/skills/playwright/playwright-best-practices/testing-patterns/i18n.md +0 -508
  152. package/skills/playwright/playwright-best-practices/testing-patterns/performance-testing.md +0 -476
  153. package/skills/playwright/playwright-best-practices/testing-patterns/security-testing.md +0 -430
  154. package/skills/playwright/playwright-best-practices/testing-patterns/visual-regression.md +0 -634
  155. package/skills/playwright/playwright-cli/SKILL.md +0 -489
  156. package/skills/playwright/playwright-cli/references/element-attributes.md +0 -23
  157. package/skills/playwright/playwright-cli/references/playwright-tests.md +0 -39
  158. package/skills/playwright/playwright-cli/references/pr-attachments.md +0 -60
  159. package/skills/playwright/playwright-cli/references/request-mocking.md +0 -87
  160. package/skills/playwright/playwright-cli/references/running-code.md +0 -245
  161. package/skills/playwright/playwright-cli/references/session-management.md +0 -227
  162. package/skills/playwright/playwright-cli/references/storage-state.md +0 -275
  163. package/skills/playwright/playwright-cli/references/test-generation.md +0 -433
  164. package/skills/playwright/playwright-cli/references/tracing.md +0 -139
  165. package/skills/playwright/playwright-cli/references/video-recording.md +0 -216
  166. package/skills/skills.lock.json +0 -89
  167. package/skills/skills.yaml +0 -35
  168. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/SKILL.md +0 -0
  169. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/references/no-install.md +0 -0
  170. /package/skills/{testomatio/explorbot → explorbot}/explorbot-plan/SKILL.md +0 -0
  171. /package/skills/{testomatio/explorbot → explorbot}/explorbot-setup/SKILL.md +0 -0
  172. /package/skills/{testomatio/explorbot → explorbot}/prima/SKILL.md +0 -0
  173. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/SKILL.md +0 -0
  174. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/references/output-format.md +0 -0
  175. /package/skills/{testomatio/qa-process → qa-process}/qa-review-pr/SKILL.md +0 -0
  176. /package/skills/{testomatio/qa-process → qa-process}/testing-workflow/SKILL.md +0 -0
  177. /package/skills/{testomatio/requirements → requirements}/catalog-features/SKILL.md +0 -0
  178. /package/skills/{testomatio/requirements → requirements}/catalog-features/references/layout.md +0 -0
  179. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/SKILL.md +0 -0
  180. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/features.md +0 -0
  181. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/layout.md +0 -0
  182. /package/skills/{testomatio/requirements → requirements}/pull-request-diff-analyzer/SKILL.md +0 -0
  183. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/SKILL.md +0 -0
  184. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/answer-shapes.md +0 -0
  185. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/examples.md +0 -0
  186. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/SKILL.md +0 -0
  187. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/references/summary-example.md +0 -0
  188. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/SKILL.md +0 -0
  189. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -0
  190. /package/skills/{testomatio/requirements → requirements}/qa-thinking/SKILL.md +0 -0
  191. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/SKILL.md +0 -0
  192. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/behaviors.md +0 -0
  193. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/layout.md +0 -0
  194. /package/skills/{testomatio/requirements → requirements}/write-user-story/SKILL.md +0 -0
  195. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/CLAUDE.md +0 -0
  196. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/SKILL.md +0 -0
  197. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -0
  198. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -0
  199. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -0
  200. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -0
  201. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -0
  202. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/SKILL.md +0 -0
  203. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -0
  204. /package/skills/{testomatio/test-automation → test-automation}/epic-requirements-specification/SKILL.md +0 -0
  205. /package/skills/{testomatio/test-automation → test-automation}/qa-automation-test-consolidation/SKILL.md +0 -0
  206. /package/skills/{testomatio/test-automation → test-automation}/qa-data-seeder/SKILL.md +0 -0
  207. /package/skills/{testomatio/test-automation → test-automation}/run-tests-with-testomatio-reporter/SKILL.md +0 -0
  208. /package/skills/{testomatio/test-automation → test-automation}/setup-change-aware-pr-testing/SKILL.md +0 -0
  209. /package/skills/{testomatio/test-automation → test-automation}/setup-ci-automation/SKILL.md +0 -0
  210. /package/skills/{testomatio/test-automation → test-automation}/testomat-allure-adapter/SKILL.md +0 -0
  211. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/SKILL.md +0 -0
  212. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -0
  213. /package/skills/{testomatio/test-management → test-management}/detect-useless-tests/SKILL.md +0 -0
  214. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/SKILL.md +0 -0
  215. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -0
  216. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/SKILL.md +0 -0
  217. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CSV_MIGRATION.md +0 -0
  218. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CUSTOM_MIGRATION.md +0 -0
  219. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTMO_MIGRATION.md +0 -0
  220. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTRAIL_MIGRATION.md +0 -0
  221. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/XRAY_MIGRATION.md +0 -0
  222. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/SKILL.md +0 -0
  223. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -0
  224. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -0
  225. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -0
  226. /package/skills/{testomatio/test-management → test-management}/qa-split-testing-levels-pyramid/SKILL.md +0 -0
  227. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/SKILL.md +0 -0
  228. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +0 -0
  229. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/SKILL.md +0 -0
  230. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -0
  231. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -0
  232. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/scripts/check-coverage.mjs +0 -0
  233. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/SKILL.md +0 -0
  234. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/test-case-format.md +0 -0
  235. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/testomat-tms-guide.md +0 -0
  236. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/writing-rule.md +0 -0
  237. /package/skills/{testomatio/test-management → test-management}/scan-automation-project/SKILL.md +0 -0
  238. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/SKILL.md +0 -0
  239. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -0
  240. /package/skills/{testomatio/test-management → test-management}/testomatio-mcp/SKILL.md +0 -0
  241. /package/skills/{testomatio/test-management → test-management}/testomatio-mcp/references/MCP_SETUP.md +0 -0
@@ -1,500 +0,0 @@
1
- # Component Testing
2
-
3
- ## Table of Contents
4
-
5
- 1. [Setup & Configuration](#setup--configuration)
6
- 2. [Mounting Components](#mounting-components)
7
- 3. [Props & State Testing](#props--state-testing)
8
- 4. [Events & Interactions](#events--interactions)
9
- 5. [Slots & Children](#slots--children)
10
- 6. [Mocking Dependencies](#mocking-dependencies)
11
- 7. [Framework-Specific Patterns](#framework-specific-patterns)
12
-
13
- ## Setup & Configuration
14
-
15
- ### Installation
16
-
17
- ```bash
18
- # React
19
- npm init playwright@latest -- --ct
20
-
21
- # Vue
22
- npm init playwright@latest -- --ct
23
-
24
- # Svelte
25
- npm init playwright@latest -- --ct
26
-
27
- # Solid
28
- npm init playwright@latest -- --ct
29
- ```
30
-
31
- ### Configuration
32
-
33
- ```typescript
34
- // playwright-ct.config.ts
35
- import { defineConfig, devices } from "@playwright/experimental-ct-react";
36
-
37
- export default defineConfig({
38
- testDir: "./tests/components",
39
- snapshotDir: "./tests/components/__snapshots__",
40
-
41
- use: {
42
- ctPort: 3100,
43
- ctViteConfig: {
44
- resolve: {
45
- alias: {
46
- "@": "/src",
47
- },
48
- },
49
- },
50
- },
51
-
52
- projects: [
53
- { name: "chromium", use: { ...devices["Desktop Chrome"] } },
54
- { name: "firefox", use: { ...devices["Desktop Firefox"] } },
55
- { name: "webkit", use: { ...devices["Desktop Safari"] } },
56
- ],
57
- });
58
- ```
59
-
60
- ### Project Structure
61
-
62
- ```
63
- src/
64
- components/
65
- Button.tsx
66
- Modal.tsx
67
- tests/
68
- components/
69
- Button.spec.tsx
70
- Modal.spec.tsx
71
- playwright/
72
- index.html # CT entry point
73
- index.tsx # CT setup (providers, styles)
74
- ```
75
-
76
- ## Mounting Components
77
-
78
- ### Basic Mount
79
-
80
- ```tsx
81
- // Button.spec.tsx
82
- import { test, expect } from "@playwright/experimental-ct-react";
83
- import { Button } from "@/components/Button";
84
-
85
- test("renders button with text", async ({ mount }) => {
86
- const component = await mount(<Button>Click me</Button>);
87
-
88
- await expect(component).toContainText("Click me");
89
- await expect(component).toBeVisible();
90
- });
91
- ```
92
-
93
- ### Mount with Props
94
-
95
- ```tsx
96
- test("renders with all props", async ({ mount }) => {
97
- const component = await mount(
98
- <Button variant="primary" size="large" disabled={false} icon="check">
99
- Submit
100
- </Button>,
101
- );
102
-
103
- await expect(component).toHaveClass(/primary/);
104
- await expect(component).toHaveClass(/large/);
105
- await expect(component.locator("svg")).toBeVisible(); // icon
106
- });
107
- ```
108
-
109
- ### Mount with Wrapper/Provider
110
-
111
- ```tsx
112
- // playwright/index.tsx - Global providers
113
- import { ThemeProvider } from "@/providers/theme";
114
- import { QueryClientProvider } from "@tanstack/react-query";
115
- import "@/styles/globals.css";
116
-
117
- export default function PlaywrightWrapper({ children }) {
118
- return (
119
- <QueryClientProvider client={queryClient}>
120
- <ThemeProvider>{children}</ThemeProvider>
121
- </QueryClientProvider>
122
- );
123
- }
124
- ```
125
-
126
- ```tsx
127
- // Or per-test wrapper
128
- test("with custom provider", async ({ mount }) => {
129
- const component = await mount(
130
- <AuthProvider initialUser={{ name: "Test" }}>
131
- <UserProfile />
132
- </AuthProvider>,
133
- );
134
-
135
- await expect(component.getByText("Test")).toBeVisible();
136
- });
137
- ```
138
-
139
- ## Props & State Testing
140
-
141
- ### Testing Prop Variations
142
-
143
- ```tsx
144
- test.describe("Button variants", () => {
145
- const variants = ["primary", "secondary", "danger", "ghost"] as const;
146
-
147
- for (const variant of variants) {
148
- test(`renders ${variant} variant`, async ({ mount }) => {
149
- const component = await mount(<Button variant={variant}>Button</Button>);
150
- await expect(component).toHaveClass(new RegExp(variant));
151
- });
152
- }
153
- });
154
- ```
155
-
156
- ### Updating Props
157
-
158
- ```tsx
159
- test("responds to prop changes", async ({ mount }) => {
160
- const component = await mount(<Counter initialCount={0} />);
161
-
162
- await expect(component.getByTestId("count")).toHaveText("0");
163
-
164
- // Update props
165
- await component.update(<Counter initialCount={10} />);
166
- await expect(component.getByTestId("count")).toHaveText("10");
167
- });
168
- ```
169
-
170
- ### Testing Controlled Components
171
-
172
- ```tsx
173
- test("controlled input", async ({ mount }) => {
174
- let externalValue = "";
175
-
176
- const component = await mount(
177
- <Input
178
- value={externalValue}
179
- onChange={(e) => {
180
- externalValue = e.target.value;
181
- }}
182
- />,
183
- );
184
-
185
- await component.locator("input").fill("hello");
186
-
187
- // For controlled components, update with new value
188
- await component.update(
189
- <Input value="hello" onChange={(e) => (externalValue = e.target.value)} />,
190
- );
191
-
192
- await expect(component.locator("input")).toHaveValue("hello");
193
- });
194
- ```
195
-
196
- ### Testing Internal State
197
-
198
- ```tsx
199
- test("internal state updates", async ({ mount }) => {
200
- const component = await mount(<Toggle defaultChecked={false} />);
201
-
202
- // Initial state
203
- await expect(component.locator('[role="switch"]')).toHaveAttribute(
204
- "aria-checked",
205
- "false",
206
- );
207
-
208
- // Trigger state change
209
- await component.click();
210
-
211
- // Verify state updated
212
- await expect(component.locator('[role="switch"]')).toHaveAttribute(
213
- "aria-checked",
214
- "true",
215
- );
216
- });
217
- ```
218
-
219
- ## Events & Interactions
220
-
221
- ### Testing Click Events
222
-
223
- ```tsx
224
- test("click event fires", async ({ mount }) => {
225
- let clicked = false;
226
-
227
- const component = await mount(
228
- <Button onClick={() => (clicked = true)}>Click</Button>,
229
- );
230
-
231
- await component.click();
232
-
233
- expect(clicked).toBe(true);
234
- });
235
- ```
236
-
237
- ### Testing Event Payloads
238
-
239
- ```tsx
240
- test("onChange provides correct value", async ({ mount }) => {
241
- const values: string[] = [];
242
-
243
- const component = await mount(
244
- <Select
245
- options={["a", "b", "c"]}
246
- onChange={(value) => values.push(value)}
247
- />,
248
- );
249
-
250
- await component.getByRole("combobox").click();
251
- await component.getByRole("option", { name: "b" }).click();
252
-
253
- expect(values).toEqual(["b"]);
254
- });
255
- ```
256
-
257
- ### Testing Form Submission
258
-
259
- ```tsx
260
- test("form submission", async ({ mount }) => {
261
- let submittedData: FormData | null = null;
262
-
263
- const component = await mount(
264
- <LoginForm
265
- onSubmit={(data) => {
266
- submittedData = data;
267
- }}
268
- />,
269
- );
270
-
271
- await component.getByLabel("Email").fill("test@example.com");
272
- await component.getByLabel("Password").fill("secret123");
273
- await component.getByRole("button", { name: "Sign in" }).click();
274
-
275
- expect(submittedData).toEqual({
276
- email: "test@example.com",
277
- password: "secret123",
278
- });
279
- });
280
- ```
281
-
282
- ### Testing Keyboard Interactions
283
-
284
- ```tsx
285
- test("keyboard navigation", async ({ mount }) => {
286
- const component = await mount(
287
- <Dropdown options={["Apple", "Banana", "Cherry"]} />,
288
- );
289
-
290
- // Open dropdown
291
- await component.getByRole("button").click();
292
-
293
- // Navigate with keyboard
294
- await component.press("ArrowDown");
295
- await component.press("ArrowDown");
296
- await component.press("Enter");
297
-
298
- await expect(component.getByRole("button")).toHaveText("Banana");
299
- });
300
- ```
301
-
302
- ## Slots & Children
303
-
304
- ### Testing Children Content
305
-
306
- ```tsx
307
- test("renders children", async ({ mount }) => {
308
- const component = await mount(
309
- <Card>
310
- <h2>Title</h2>
311
- <p>Description</p>
312
- </Card>,
313
- );
314
-
315
- await expect(component.getByRole("heading")).toHaveText("Title");
316
- await expect(component.getByText("Description")).toBeVisible();
317
- });
318
- ```
319
-
320
- ### Testing Named Slots (Vue)
321
-
322
- ```tsx
323
- // Vue component with slots
324
- test("renders named slots", async ({ mount }) => {
325
- const component = await mount(Modal, {
326
- slots: {
327
- header: "<h2>Modal Title</h2>",
328
- default: "<p>Modal content</p>",
329
- footer: "<button>Close</button>",
330
- },
331
- });
332
-
333
- await expect(component.getByRole("heading")).toHaveText("Modal Title");
334
- await expect(component.getByRole("button")).toHaveText("Close");
335
- });
336
- ```
337
-
338
- ### Testing Render Props
339
-
340
- ```tsx
341
- test("render prop pattern", async ({ mount }) => {
342
- const component = await mount(
343
- <DataFetcher url="/api/users">
344
- {({ data, loading }) =>
345
- loading ? <span>Loading...</span> : <span>{data.name}</span>
346
- }
347
- </DataFetcher>,
348
- );
349
-
350
- // Initially loading
351
- await expect(component.getByText("Loading...")).toBeVisible();
352
-
353
- // After data loads
354
- await expect(component.getByText(/User/)).toBeVisible();
355
- });
356
- ```
357
-
358
- ## Mocking Dependencies
359
-
360
- ### Mocking Imports
361
-
362
- ```tsx
363
- // playwright/index.tsx - Mock at setup level
364
- import { beforeMount } from "@playwright/experimental-ct-react/hooks";
365
-
366
- beforeMount(async ({ hooksConfig }) => {
367
- // Mock analytics
368
- window.analytics = {
369
- track: () => {},
370
- identify: () => {},
371
- };
372
-
373
- // Mock feature flags
374
- if (hooksConfig?.featureFlags) {
375
- window.__FEATURE_FLAGS__ = hooksConfig.featureFlags;
376
- }
377
- });
378
- ```
379
-
380
- ```tsx
381
- // Test with mocked config
382
- test("with feature flag", async ({ mount }) => {
383
- const component = await mount(<FeatureComponent />, {
384
- hooksConfig: {
385
- featureFlags: { newFeature: true },
386
- },
387
- });
388
-
389
- await expect(component.getByText("New Feature")).toBeVisible();
390
- });
391
- ```
392
-
393
- ### Mocking API Calls
394
-
395
- ```tsx
396
- test("component with API", async ({ mount, page }) => {
397
- // Mock API before mounting
398
- await page.route("**/api/user", (route) => {
399
- route.fulfill({
400
- json: { id: 1, name: "Test User" },
401
- });
402
- });
403
-
404
- const component = await mount(<UserProfile userId={1} />);
405
-
406
- await expect(component.getByText("Test User")).toBeVisible();
407
- });
408
- ```
409
-
410
- ### Mocking Hooks
411
-
412
- ```tsx
413
- // Mock custom hook via module mock
414
- test("with mocked hook", async ({ mount }) => {
415
- const component = await mount(<Dashboard />, {
416
- hooksConfig: {
417
- mockAuth: { user: { name: "Admin" }, isAdmin: true },
418
- },
419
- });
420
-
421
- await expect(component.getByText("Admin Panel")).toBeVisible();
422
- });
423
- ```
424
-
425
- ## Framework-Specific Patterns
426
-
427
- ### React Testing
428
-
429
- ```tsx
430
- // React with refs
431
- test("exposes ref methods", async ({ mount }) => {
432
- let inputRef: HTMLInputElement | null = null;
433
-
434
- const component = await mount(<Input ref={(el) => (inputRef = el)} />);
435
-
436
- await component.locator("input").fill("test");
437
- expect(inputRef?.value).toBe("test");
438
- });
439
-
440
- // React with context
441
- test("uses context", async ({ mount }) => {
442
- const component = await mount(
443
- <UserContext.Provider value={{ name: "Test" }}>
444
- <UserGreeting />
445
- </UserContext.Provider>,
446
- );
447
-
448
- await expect(component).toContainText("Hello, Test");
449
- });
450
- ```
451
-
452
- ### Vue Testing
453
-
454
- ```tsx
455
- import { test, expect } from "@playwright/experimental-ct-vue";
456
- import MyInput from "@/components/MyInput.vue";
457
-
458
- // With v-model
459
- test("v-model binding", async ({ mount }) => {
460
- let modelValue = "";
461
- const component = await mount(MyInput, {
462
- props: {
463
- modelValue,
464
- "onUpdate:modelValue": (v: string) => (modelValue = v),
465
- },
466
- });
467
-
468
- await component.locator("input").fill("test");
469
- expect(modelValue).toBe("test");
470
- });
471
- ```
472
-
473
- ### Svelte Testing
474
-
475
- ```tsx
476
- import { test, expect } from "@playwright/experimental-ct-svelte";
477
- import Counter from "./Counter.svelte";
478
-
479
- test("Svelte component", async ({ mount }) => {
480
- const component = await mount(Counter, { props: { initialCount: 5 } });
481
- await expect(component.getByTestId("count")).toHaveText("5");
482
- await component.getByRole("button", { name: "+" }).click();
483
- await expect(component.getByTestId("count")).toHaveText("6");
484
- });
485
- ```
486
-
487
- ## Anti-Patterns to Avoid
488
-
489
- | Anti-Pattern | Problem | Solution |
490
- | ------------------------------ | ------------------- | --------------------------------- |
491
- | Testing implementation details | Brittle tests | Test behavior, not internal state |
492
- | Snapshot testing everything | Maintenance burden | Use for visual regression only |
493
- | Not isolating components | Hidden dependencies | Mock all external dependencies |
494
- | Testing framework behavior | Redundant | Focus on your component logic |
495
- | Skipping accessibility | Misses real issues | Include a11y checks in CT |
496
-
497
- ## Related References
498
-
499
- - **Accessibility**: See [accessibility.md](accessibility.md) for a11y testing in components
500
- - **Fixtures**: See [fixtures-hooks.md](../core/fixtures-hooks.md) for shared test setup