testeiya 0.10.1 → 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 (225) hide show
  1. package/README.md +7 -19
  2. package/dist/prompt/clis.d.ts +7 -0
  3. package/dist/prompt/pipeline-report.d.ts +1 -0
  4. package/dist/prompt/report.d.ts +10 -0
  5. package/dist/prompt/system-prompt.d.ts +22 -0
  6. package/dist/prompt/testomat.io.d.ts +19 -0
  7. package/dist/prompt/thread.d.ts +73 -0
  8. package/dist/src/args.d.ts +39 -0
  9. package/dist/src/attribution-extension.d.ts +3 -0
  10. package/dist/src/checkpoint.d.ts +30 -0
  11. package/dist/src/cli.d.ts +2 -0
  12. package/dist/src/cli.js +27 -32
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/doctor.d.ts +11 -0
  15. package/dist/src/env.d.ts +30 -0
  16. package/dist/src/exec.d.ts +11 -0
  17. package/dist/src/git.d.ts +41 -0
  18. package/dist/src/langfuse-extension.d.ts +7 -0
  19. package/dist/src/langfuse.d.ts +67 -0
  20. package/dist/src/mcp.d.ts +19 -0
  21. package/dist/src/model.d.ts +20 -0
  22. package/dist/src/models.d.ts +1 -0
  23. package/dist/src/output.d.ts +84 -0
  24. package/dist/src/pipeline/command-stage.d.ts +12 -0
  25. package/dist/src/pipeline/crash-guard.d.ts +12 -0
  26. package/dist/src/pipeline/crash-guard.js +21 -0
  27. package/dist/src/pipeline/crash-guard.js.map +1 -0
  28. package/dist/src/pipeline/diagram.d.ts +24 -0
  29. package/dist/src/pipeline/gate.d.ts +21 -0
  30. package/dist/src/pipeline/launcher.d.ts +33 -0
  31. package/dist/src/pipeline/launcher.js +16 -3
  32. package/dist/src/pipeline/launcher.js.map +1 -1
  33. package/dist/src/pipeline/log.d.ts +29 -0
  34. package/dist/src/pipeline/log.js +9 -0
  35. package/dist/src/pipeline/log.js.map +1 -1
  36. package/dist/src/pipeline/overlay.d.ts +29 -0
  37. package/dist/src/pipeline/pipeline-file.d.ts +44 -0
  38. package/dist/src/pipeline/pipeline.d.ts +78 -0
  39. package/dist/src/pipeline/pipeline.js +22 -0
  40. package/dist/src/pipeline/pipeline.js.map +1 -1
  41. package/dist/src/pipeline/report.d.ts +26 -0
  42. package/dist/src/pipeline/report.js +13 -0
  43. package/dist/src/pipeline/report.js.map +1 -1
  44. package/dist/src/pipeline/spec.d.ts +63 -0
  45. package/dist/src/pipeline/stage-env.d.ts +13 -0
  46. package/dist/src/pipeline/stage-env.js +31 -0
  47. package/dist/src/pipeline/stage-env.js.map +1 -0
  48. package/dist/src/pipeline/stage.d.ts +71 -0
  49. package/dist/src/pipeline/stage.js.map +1 -1
  50. package/dist/src/pipeline/state.d.ts +63 -0
  51. package/dist/src/pipeline/summary-stage.d.ts +24 -0
  52. package/dist/src/pipeline/task-stage.d.ts +24 -0
  53. package/dist/src/pipeline/task-stage.js +86 -2
  54. package/dist/src/pipeline/task-stage.js.map +1 -1
  55. package/dist/src/pipeline/variables.d.ts +20 -0
  56. package/dist/src/result.d.ts +6 -0
  57. package/dist/src/run.d.ts +69 -0
  58. package/dist/src/run.js +116 -60
  59. package/dist/src/run.js.map +1 -1
  60. package/dist/src/session.d.ts +43 -0
  61. package/dist/src/sessions.d.ts +23 -0
  62. package/dist/src/skills.d.ts +29 -0
  63. package/package.json +11 -2
  64. package/pipelines/api-testing.yml +1 -1
  65. package/scripts/vendor-skills.js +62 -0
  66. package/skills/codeceptjs/ci-fix-tests/SKILL.md +0 -119
  67. package/skills/codeceptjs/codeceptjs-auth/SKILL.md +0 -141
  68. package/skills/codeceptjs/codeceptjs-exploration/SKILL.md +0 -100
  69. package/skills/codeceptjs/codeceptjs-fundamentals/SKILL.md +0 -196
  70. package/skills/codeceptjs/codeceptjs-run-analysis/SKILL.md +0 -83
  71. package/skills/codeceptjs/debugging-codeceptjs-tests/SKILL.md +0 -126
  72. package/skills/codeceptjs/lint-codeceptjs-tests/SKILL.md +0 -104
  73. package/skills/codeceptjs/migrate-codeceptjs-4/SKILL.md +0 -109
  74. package/skills/codeceptjs/migrate-cypress-to-codeceptjs/SKILL.md +0 -295
  75. package/skills/codeceptjs/migrate-protractor-to-codeceptjs/SKILL.md +0 -339
  76. package/skills/codeceptjs/migrate-selenium-java-to-codeceptjs/SKILL.md +0 -459
  77. package/skills/codeceptjs/migrate-testcafe-to-codeceptjs/SKILL.md +0 -338
  78. package/skills/codeceptjs/refactoring-codeceptjs-tests/SKILL.md +0 -78
  79. package/skills/codeceptjs/writing-codeceptjs-tests/SKILL.md +0 -102
  80. package/skills/playwright/playwright-best-practices/SKILL.md +0 -303
  81. package/skills/playwright/playwright-best-practices/advanced/authentication-flows.md +0 -360
  82. package/skills/playwright/playwright-best-practices/advanced/authentication.md +0 -871
  83. package/skills/playwright/playwright-best-practices/advanced/clock-mocking.md +0 -364
  84. package/skills/playwright/playwright-best-practices/advanced/mobile-testing.md +0 -409
  85. package/skills/playwright/playwright-best-practices/advanced/multi-context.md +0 -288
  86. package/skills/playwright/playwright-best-practices/advanced/multi-user.md +0 -393
  87. package/skills/playwright/playwright-best-practices/advanced/network-advanced.md +0 -452
  88. package/skills/playwright/playwright-best-practices/advanced/third-party.md +0 -464
  89. package/skills/playwright/playwright-best-practices/architecture/pom-vs-fixtures.md +0 -363
  90. package/skills/playwright/playwright-best-practices/architecture/test-architecture.md +0 -369
  91. package/skills/playwright/playwright-best-practices/architecture/when-to-mock.md +0 -383
  92. package/skills/playwright/playwright-best-practices/browser-apis/browser-apis.md +0 -391
  93. package/skills/playwright/playwright-best-practices/browser-apis/iframes.md +0 -403
  94. package/skills/playwright/playwright-best-practices/browser-apis/service-workers.md +0 -504
  95. package/skills/playwright/playwright-best-practices/browser-apis/websockets.md +0 -403
  96. package/skills/playwright/playwright-best-practices/core/annotations.md +0 -424
  97. package/skills/playwright/playwright-best-practices/core/assertions-waiting.md +0 -361
  98. package/skills/playwright/playwright-best-practices/core/configuration.md +0 -452
  99. package/skills/playwright/playwright-best-practices/core/fixtures-hooks.md +0 -417
  100. package/skills/playwright/playwright-best-practices/core/global-setup.md +0 -434
  101. package/skills/playwright/playwright-best-practices/core/locators.md +0 -242
  102. package/skills/playwright/playwright-best-practices/core/page-object-model.md +0 -315
  103. package/skills/playwright/playwright-best-practices/core/projects-dependencies.md +0 -453
  104. package/skills/playwright/playwright-best-practices/core/test-data.md +0 -492
  105. package/skills/playwright/playwright-best-practices/core/test-suite-structure.md +0 -361
  106. package/skills/playwright/playwright-best-practices/core/test-tags.md +0 -298
  107. package/skills/playwright/playwright-best-practices/debugging/console-errors.md +0 -420
  108. package/skills/playwright/playwright-best-practices/debugging/debugging.md +0 -504
  109. package/skills/playwright/playwright-best-practices/debugging/error-testing.md +0 -360
  110. package/skills/playwright/playwright-best-practices/debugging/flaky-tests.md +0 -496
  111. package/skills/playwright/playwright-best-practices/frameworks/angular.md +0 -530
  112. package/skills/playwright/playwright-best-practices/frameworks/nextjs.md +0 -469
  113. package/skills/playwright/playwright-best-practices/frameworks/react.md +0 -531
  114. package/skills/playwright/playwright-best-practices/frameworks/vue.md +0 -574
  115. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/ci-cd.md +0 -468
  116. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/docker.md +0 -283
  117. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/github-actions.md +0 -546
  118. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/gitlab.md +0 -397
  119. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/other-providers.md +0 -521
  120. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/parallel-sharding.md +0 -371
  121. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/performance.md +0 -453
  122. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/reporting.md +0 -424
  123. package/skills/playwright/playwright-best-practices/infrastructure-ci-cd/test-coverage.md +0 -497
  124. package/skills/playwright/playwright-best-practices/testing-patterns/accessibility.md +0 -359
  125. package/skills/playwright/playwright-best-practices/testing-patterns/api-testing.md +0 -719
  126. package/skills/playwright/playwright-best-practices/testing-patterns/browser-extensions.md +0 -506
  127. package/skills/playwright/playwright-best-practices/testing-patterns/canvas-webgl.md +0 -493
  128. package/skills/playwright/playwright-best-practices/testing-patterns/component-testing.md +0 -500
  129. package/skills/playwright/playwright-best-practices/testing-patterns/drag-drop.md +0 -576
  130. package/skills/playwright/playwright-best-practices/testing-patterns/electron.md +0 -509
  131. package/skills/playwright/playwright-best-practices/testing-patterns/file-operations.md +0 -377
  132. package/skills/playwright/playwright-best-practices/testing-patterns/file-upload-download.md +0 -562
  133. package/skills/playwright/playwright-best-practices/testing-patterns/forms-validation.md +0 -561
  134. package/skills/playwright/playwright-best-practices/testing-patterns/graphql-testing.md +0 -331
  135. package/skills/playwright/playwright-best-practices/testing-patterns/i18n.md +0 -508
  136. package/skills/playwright/playwright-best-practices/testing-patterns/performance-testing.md +0 -476
  137. package/skills/playwright/playwright-best-practices/testing-patterns/security-testing.md +0 -430
  138. package/skills/playwright/playwright-best-practices/testing-patterns/visual-regression.md +0 -634
  139. package/skills/playwright/playwright-cli/SKILL.md +0 -489
  140. package/skills/playwright/playwright-cli/references/element-attributes.md +0 -23
  141. package/skills/playwright/playwright-cli/references/playwright-tests.md +0 -39
  142. package/skills/playwright/playwright-cli/references/pr-attachments.md +0 -60
  143. package/skills/playwright/playwright-cli/references/request-mocking.md +0 -87
  144. package/skills/playwright/playwright-cli/references/running-code.md +0 -245
  145. package/skills/playwright/playwright-cli/references/session-management.md +0 -227
  146. package/skills/playwright/playwright-cli/references/storage-state.md +0 -275
  147. package/skills/playwright/playwright-cli/references/test-generation.md +0 -433
  148. package/skills/playwright/playwright-cli/references/tracing.md +0 -139
  149. package/skills/playwright/playwright-cli/references/video-recording.md +0 -216
  150. package/skills/skills.lock.json +0 -89
  151. package/skills/skills.yaml +0 -35
  152. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/SKILL.md +0 -0
  153. /package/skills/{testomatio/explorbot → explorbot}/explorbot-fundamentals/references/no-install.md +0 -0
  154. /package/skills/{testomatio/explorbot → explorbot}/explorbot-plan/SKILL.md +0 -0
  155. /package/skills/{testomatio/explorbot → explorbot}/explorbot-setup/SKILL.md +0 -0
  156. /package/skills/{testomatio/explorbot → explorbot}/prima/SKILL.md +0 -0
  157. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/SKILL.md +0 -0
  158. /package/skills/{testomatio/qa-process → qa-process}/qa-lead-strategy-advisor/references/output-format.md +0 -0
  159. /package/skills/{testomatio/qa-process → qa-process}/qa-review-pr/SKILL.md +0 -0
  160. /package/skills/{testomatio/qa-process → qa-process}/testing-workflow/SKILL.md +0 -0
  161. /package/skills/{testomatio/requirements → requirements}/catalog-features/SKILL.md +0 -0
  162. /package/skills/{testomatio/requirements → requirements}/catalog-features/references/layout.md +0 -0
  163. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/SKILL.md +0 -0
  164. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/features.md +0 -0
  165. /package/skills/{testomatio/requirements → requirements}/detect-product-mismatches/references/layout.md +0 -0
  166. /package/skills/{testomatio/requirements → requirements}/pull-request-diff-analyzer/SKILL.md +0 -0
  167. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/SKILL.md +0 -0
  168. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/answer-shapes.md +0 -0
  169. /package/skills/{testomatio/requirements → requirements}/qa-explain-behavior/references/examples.md +0 -0
  170. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/SKILL.md +0 -0
  171. /package/skills/{testomatio/requirements → requirements}/qa-pr-requirements-analyzer/references/summary-example.md +0 -0
  172. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/SKILL.md +0 -0
  173. /package/skills/{testomatio/requirements → requirements}/qa-requirement-reviewer/references/requirements_reviewer_examples.md +0 -0
  174. /package/skills/{testomatio/requirements → requirements}/qa-thinking/SKILL.md +0 -0
  175. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/SKILL.md +0 -0
  176. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/behaviors.md +0 -0
  177. /package/skills/{testomatio/requirements → requirements}/wiki-from-code/references/layout.md +0 -0
  178. /package/skills/{testomatio/requirements → requirements}/write-user-story/SKILL.md +0 -0
  179. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/CLAUDE.md +0 -0
  180. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/SKILL.md +0 -0
  181. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/CODECEPTJS_BEST_PRACTICES.md +0 -0
  182. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/FINAL_SUMMARY_TEMPLATE.md +0 -0
  183. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/PLAYWRIGHT_BEST_PRACTICES.md +0 -0
  184. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/POM_BEST_PRACTICES.md +0 -0
  185. /package/skills/{testomatio/test-automation → test-automation}/automate-manual-test-cases/references/TEST_DATA_MANAGEMENT.md +0 -0
  186. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/SKILL.md +0 -0
  187. /package/skills/{testomatio/test-automation → test-automation}/debug-fix-failed-flaky-autotests/references/DEBUGGING_QUICK_REFERENCE.md +0 -0
  188. /package/skills/{testomatio/test-automation → test-automation}/epic-requirements-specification/SKILL.md +0 -0
  189. /package/skills/{testomatio/test-automation → test-automation}/qa-automation-test-consolidation/SKILL.md +0 -0
  190. /package/skills/{testomatio/test-automation → test-automation}/qa-data-seeder/SKILL.md +0 -0
  191. /package/skills/{testomatio/test-automation → test-automation}/run-tests-with-testomatio-reporter/SKILL.md +0 -0
  192. /package/skills/{testomatio/test-automation → test-automation}/setup-change-aware-pr-testing/SKILL.md +0 -0
  193. /package/skills/{testomatio/test-automation → test-automation}/setup-ci-automation/SKILL.md +0 -0
  194. /package/skills/{testomatio/test-automation → test-automation}/testomat-allure-adapter/SKILL.md +0 -0
  195. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/SKILL.md +0 -0
  196. /package/skills/{testomatio/test-management → test-management}/detect-duplicate-test-cases/references/DUPLICATE_INSTRUCTIONS.md +0 -0
  197. /package/skills/{testomatio/test-management → test-management}/detect-useless-tests/SKILL.md +0 -0
  198. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/SKILL.md +0 -0
  199. /package/skills/{testomatio/test-management → test-management}/improve-test-cases/references/TESTOMAT_MARKDOWN_EXAMPLE.md +0 -0
  200. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/SKILL.md +0 -0
  201. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CSV_MIGRATION.md +0 -0
  202. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/CUSTOM_MIGRATION.md +0 -0
  203. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTMO_MIGRATION.md +0 -0
  204. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/TESTRAIL_MIGRATION.md +0 -0
  205. /package/skills/{testomatio/test-management → test-management}/migrate-to-testomatio/references/XRAY_MIGRATION.md +0 -0
  206. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/SKILL.md +0 -0
  207. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_ARTIFACTS.md +0 -0
  208. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_HTML_REPORT.md +0 -0
  209. /package/skills/{testomatio/test-management → test-management}/qa-e2e-tests-reporting/references/TESTOMATIO_REPORTERS_CONFIG.md +0 -0
  210. /package/skills/{testomatio/test-management → test-management}/qa-split-testing-levels-pyramid/SKILL.md +0 -0
  211. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/SKILL.md +0 -0
  212. /package/skills/{testomatio/test-management → test-management}/qa-sprint-report-by-testomatio/references/qa-sprint-report.md +0 -0
  213. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/SKILL.md +0 -0
  214. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/COVERAGE_FILE_FORMAT.md +0 -0
  215. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/references/E2E_FRAMEWORKS.md +0 -0
  216. /package/skills/{testomatio/test-management → test-management}/qa-test-code-coverage/scripts/check-coverage.mjs +0 -0
  217. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/SKILL.md +0 -0
  218. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/test-case-format.md +0 -0
  219. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/testomat-tms-guide.md +0 -0
  220. /package/skills/{testomatio/test-management → test-management}/qa-write-test-cases/references/writing-rule.md +0 -0
  221. /package/skills/{testomatio/test-management → test-management}/scan-automation-project/SKILL.md +0 -0
  222. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/SKILL.md +0 -0
  223. /package/skills/{testomatio/test-management → test-management}/sync-test-cases-with-tms/references/TESTOMATIO_CLI.md +0 -0
  224. /package/skills/{testomatio/test-management → test-management}/testomatio-mcp/SKILL.md +0 -0
  225. /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