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,417 +0,0 @@
1
- # Fixtures & Hooks
2
-
3
- ## Table of Contents
4
-
5
- 1. [Built-in Fixtures](#built-in-fixtures)
6
- 2. [Custom Fixtures](#custom-fixtures)
7
- 3. [Fixture Scopes](#fixture-scopes)
8
- 4. [Hooks](#hooks)
9
- 5. [Authentication Patterns](#authentication-patterns)
10
- 6. [Database Fixtures](#database-fixtures)
11
-
12
- ## Built-in Fixtures
13
-
14
- ### Core Fixtures
15
-
16
- ```typescript
17
- test("example", async ({
18
- page, // Isolated page instance
19
- context, // Browser context (cookies, localStorage)
20
- browser, // Browser instance
21
- browserName, // 'chromium', 'firefox', or 'webkit'
22
- request, // API request context
23
- }) => {
24
- // Each test gets fresh instances
25
- });
26
- ```
27
-
28
- ### Request Fixture
29
-
30
- ```typescript
31
- test("API call", async ({ request }) => {
32
- const response = await request.get("/api/users");
33
- await expect(response).toBeOK();
34
-
35
- const users = await response.json();
36
- expect(users).toHaveLength(5);
37
- });
38
- ```
39
-
40
- ## Custom Fixtures
41
-
42
- ### Basic Custom Fixture
43
-
44
- ```typescript
45
- // fixtures.ts
46
- import { test as base } from "@playwright/test";
47
-
48
- // Declare fixture types
49
- type MyFixtures = {
50
- todoPage: TodoPage;
51
- apiClient: ApiClient;
52
- };
53
-
54
- export const test = base.extend<MyFixtures>({
55
- // Fixture with setup and teardown
56
- todoPage: async ({ page }, use) => {
57
- const todoPage = new TodoPage(page);
58
- await todoPage.goto();
59
-
60
- await use(todoPage); // Test runs here
61
-
62
- // Teardown (optional)
63
- await todoPage.clearTodos();
64
- },
65
-
66
- // Simple fixture
67
- apiClient: async ({ request }, use) => {
68
- await use(new ApiClient(request));
69
- },
70
- });
71
-
72
- export { expect } from "@playwright/test";
73
- ```
74
-
75
- ### Fixture with Options
76
-
77
- ```typescript
78
- type Options = {
79
- defaultUser: { email: string; password: string };
80
- };
81
-
82
- type Fixtures = {
83
- authenticatedPage: Page;
84
- };
85
-
86
- export const test = base.extend<Options & Fixtures>({
87
- // Define option with default
88
- defaultUser: [
89
- { email: "test@example.com", password: "pass123" },
90
- { option: true },
91
- ],
92
-
93
- // Use option in fixture
94
- authenticatedPage: async ({ page, defaultUser }, use) => {
95
- await page.goto("/login");
96
- await page.getByLabel("Email").fill(defaultUser.email);
97
- await page.getByLabel("Password").fill(defaultUser.password);
98
- await page.getByRole("button", { name: "Sign in" }).click();
99
- await use(page);
100
- },
101
- });
102
-
103
- // Override in config
104
- export default defineConfig({
105
- use: {
106
- defaultUser: { email: "admin@example.com", password: "admin123" },
107
- },
108
- });
109
- ```
110
-
111
- ### Automatic Fixtures
112
-
113
- ```typescript
114
- export const test = base.extend<{}, { setupDb: void }>({
115
- // Auto-fixture runs for every test without explicit usage
116
- setupDb: [
117
- async ({}, use) => {
118
- await seedDatabase();
119
- await use();
120
- await cleanDatabase();
121
- },
122
- { auto: true },
123
- ],
124
- });
125
- ```
126
-
127
- ## Fixture Scopes
128
-
129
- ### Test Scope (Default)
130
-
131
- Created fresh for each test:
132
-
133
- ```typescript
134
- test.extend({
135
- page: async ({ browser }, use) => {
136
- const page = await browser.newPage();
137
- await use(page);
138
- await page.close();
139
- },
140
- });
141
- ```
142
-
143
- ### Worker Scope
144
-
145
- Shared across tests in the same worker (each worker gets its own instance; tests in different workers do not share it):
146
-
147
- ```typescript
148
- type WorkerFixtures = {
149
- sharedAccount: Account;
150
- };
151
-
152
- export const test = base.extend<{}, WorkerFixtures>({
153
- sharedAccount: [
154
- async ({ browser }, use) => {
155
- // Expensive setup - runs once per worker
156
- const account = await createTestAccount();
157
- await use(account);
158
- await deleteTestAccount(account);
159
- },
160
- { scope: "worker" },
161
- ],
162
- });
163
- ```
164
-
165
- ### Isolate test data between parallel workers
166
-
167
- When tests in different workers touch the same backend or DB (e.g. same user, same tenant), they can collide and cause flaky failures. Use `testInfo.workerIndex` (or `process.env.TEST_WORKER_INDEX`) in a worker-scoped fixture to create unique data per worker:
168
-
169
- ```typescript
170
- import { test as baseTest } from "@playwright/test";
171
-
172
- type WorkerFixtures = {
173
- dbUserName: string;
174
- };
175
-
176
- export const test = baseTest.extend<{}, WorkerFixtures>({
177
- dbUserName: [
178
- async ({}, use, testInfo) => {
179
- const userName = `user-${testInfo.workerIndex}`;
180
- await createUserInTestDatabase(userName);
181
- await use(userName);
182
- await deleteUserFromTestDatabase(userName);
183
- },
184
- { scope: "worker" },
185
- ],
186
- });
187
- ```
188
-
189
- Then each worker uses a distinct user (e.g. `user-1`, `user-2`), so parallel workers do not overwrite each other’s data.
190
-
191
- ## Hooks
192
-
193
- ### beforeEach / afterEach
194
-
195
- ```typescript
196
- test.beforeEach(async ({ page }) => {
197
- // Runs before each test in file
198
- await page.goto("/");
199
- });
200
-
201
- test.afterEach(async ({ page }, testInfo) => {
202
- // Runs after each test
203
- if (testInfo.status !== "passed") {
204
- await page.screenshot({ path: `failed-${testInfo.title}.png` });
205
- }
206
- });
207
- ```
208
-
209
- ### beforeAll / afterAll
210
-
211
- ```typescript
212
- test.beforeAll(async ({ browser }) => {
213
- // Runs once before all tests in file
214
- // Note: Cannot use page fixture here
215
- });
216
-
217
- test.afterAll(async () => {
218
- // Runs once after all tests in file
219
- });
220
- ```
221
-
222
- ### Describe-Level Hooks
223
-
224
- ```typescript
225
- test.describe("User Management", () => {
226
- test.beforeEach(async ({ page }) => {
227
- await page.goto("/users");
228
- });
229
-
230
- test("can list users", async ({ page }) => {
231
- // Starts at /users
232
- });
233
-
234
- test("can add user", async ({ page }) => {
235
- // Starts at /users
236
- });
237
- });
238
- ```
239
-
240
- ## Authentication Patterns
241
-
242
- ### Global Setup with Storage State
243
-
244
- ```typescript
245
- // auth.setup.ts
246
- import { test as setup, expect } from "@playwright/test";
247
-
248
- const authFile = ".auth/user.json";
249
-
250
- setup("authenticate", async ({ page }) => {
251
- await page.goto("/login");
252
- await page.getByLabel("Email").fill(process.env.TEST_EMAIL!);
253
- await page.getByLabel("Password").fill(process.env.TEST_PASSWORD!);
254
- await page.getByRole("button", { name: "Sign in" }).click();
255
-
256
- await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible();
257
- await page.context().storageState({ path: authFile });
258
- });
259
- ```
260
-
261
- ```typescript
262
- // playwright.config.ts
263
- export default defineConfig({
264
- projects: [
265
- { name: "setup", testMatch: /.*\.setup\.ts/ },
266
- {
267
- name: "chromium",
268
- use: {
269
- ...devices["Desktop Chrome"],
270
- storageState: ".auth/user.json",
271
- },
272
- dependencies: ["setup"],
273
- },
274
- ],
275
- });
276
- ```
277
-
278
- ### Multiple Auth States
279
-
280
- ```typescript
281
- // auth.setup.ts
282
- setup("admin auth", async ({ page }) => {
283
- await login(page, "admin@example.com", "adminpass");
284
- await page.context().storageState({ path: ".auth/admin.json" });
285
- });
286
-
287
- setup("user auth", async ({ page }) => {
288
- await login(page, "user@example.com", "userpass");
289
- await page.context().storageState({ path: ".auth/user.json" });
290
- });
291
- ```
292
-
293
- ```typescript
294
- // playwright.config.ts
295
- projects: [
296
- {
297
- name: "admin tests",
298
- testMatch: /.*admin.*\.spec\.ts/,
299
- use: { storageState: ".auth/admin.json" },
300
- dependencies: ["setup"],
301
- },
302
- {
303
- name: "user tests",
304
- testMatch: /.*user.*\.spec\.ts/,
305
- use: { storageState: ".auth/user.json" },
306
- dependencies: ["setup"],
307
- },
308
- ];
309
- ```
310
-
311
- ### Auth Fixture
312
-
313
- ```typescript
314
- // fixtures/auth.fixture.ts
315
- export const test = base.extend<{ adminPage: Page; userPage: Page }>({
316
- adminPage: async ({ browser }, use) => {
317
- const context = await browser.newContext({
318
- storageState: ".auth/admin.json",
319
- });
320
- const page = await context.newPage();
321
- await use(page);
322
- await context.close();
323
- },
324
-
325
- userPage: async ({ browser }, use) => {
326
- const context = await browser.newContext({
327
- storageState: ".auth/user.json",
328
- });
329
- const page = await context.newPage();
330
- await use(page);
331
- await context.close();
332
- },
333
- });
334
- ```
335
-
336
- ## Database Fixtures
337
-
338
- This section covers **per-test database fixtures** (isolation, transaction rollback). For related topics:
339
-
340
- - **Test data factories** (builders, Faker): See [test-data.md](test-data.md)
341
- - **One-time database setup** (migrations, snapshots): See [global-setup.md](global-setup.md#database-patterns)
342
-
343
- ### Transaction Rollback Pattern
344
-
345
- ```typescript
346
- import { test as base } from "@playwright/test";
347
- import { db } from "../db";
348
-
349
- export const test = base.extend<{ dbTransaction: Transaction }>({
350
- dbTransaction: async ({}, use) => {
351
- const transaction = await db.beginTransaction();
352
-
353
- await use(transaction);
354
-
355
- await transaction.rollback(); // Clean slate for next test
356
- },
357
- });
358
- ```
359
-
360
- ### Seed Data Fixture
361
-
362
- ```typescript
363
- type TestData = {
364
- testUser: User;
365
- testProducts: Product[];
366
- };
367
-
368
- export const test = base.extend<TestData>({
369
- testUser: async ({}, use) => {
370
- const user = await db.users.create({
371
- email: `test-${Date.now()}@example.com`,
372
- name: "Test User",
373
- });
374
-
375
- await use(user);
376
-
377
- await db.users.delete(user.id);
378
- },
379
-
380
- testProducts: async ({ testUser }, use) => {
381
- const products = await db.products.createMany([
382
- { name: "Product A", ownerId: testUser.id },
383
- { name: "Product B", ownerId: testUser.id },
384
- ]);
385
-
386
- await use(products);
387
-
388
- await db.products.deleteMany(products.map((p) => p.id));
389
- },
390
- });
391
- ```
392
-
393
- ## Fixture Tips
394
-
395
- | Tip | Explanation |
396
- | ------------------ | ------------------------------------------- |
397
- | Fixtures are lazy | Only created when used |
398
- | Compose fixtures | Use other fixtures as dependencies |
399
- | Keep setup minimal | Do heavy lifting in worker-scoped fixtures |
400
- | Clean up resources | Use teardown in fixtures, not afterEach |
401
- | Avoid shared state | Each fixture instance should be independent |
402
-
403
- ## Anti-Patterns to Avoid
404
-
405
- | Anti-Pattern | Problem | Solution |
406
- | ----------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
407
- | Shared mutable state between tests | Race conditions, order dependencies | Use fixtures for isolation |
408
- | Global variables in tests | Tests depend on execution order | Use fixtures or beforeEach for setup |
409
- | Not cleaning up test data | Tests interfere with each other | Use fixtures with teardown or database transactions |
410
- | Shared `page` or `context` in `beforeAll` | State leak between tests; flaky when tests run in parallel | Use default one-context-per-test, or `beforeEach` + fresh page; if serial is required, prefer `test.describe.configure({ mode: 'serial' })` and document that isolation is sacrificed |
411
- | Backend/DB state shared across workers | Tests in different workers collide on same data | Use worker-scoped fixture with `testInfo.workerIndex` to create unique data per worker |
412
-
413
- ## Related References
414
-
415
- - **Page Objects with fixtures**: See [page-object-model.md](page-object-model.md) for POM patterns
416
- - **Test organization**: See [test-suite-structure.md](test-suite-structure.md) for test structure
417
- - **Debugging fixture issues**: See [debugging.md](../debugging/debugging.md) for troubleshooting