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,452 +0,0 @@
1
- # Advanced Network Interception
2
-
3
- ## Table of Contents
4
-
5
- 1. [Request Modification](#request-modification)
6
- 2. [GraphQL Mocking](#graphql-mocking)
7
- 3. [HAR Recording & Playback](#har-recording--playback)
8
- 4. [Conditional Mocking](#conditional-mocking)
9
- 5. [Network Throttling](#network-throttling)
10
-
11
- ## Request Modification
12
-
13
- ### Modify Request Headers
14
-
15
- ```typescript
16
- test("add auth header to requests", async ({ page }) => {
17
- await page.route("**/api/**", (route) => {
18
- const headers = {
19
- ...route.request().headers(),
20
- Authorization: "Bearer test-token",
21
- "X-Test-Header": "test-value",
22
- };
23
- route.continue({ headers });
24
- });
25
-
26
- await page.goto("/dashboard");
27
- });
28
- ```
29
-
30
- ### Modify Request Body
31
-
32
- ```typescript
33
- test("modify POST body", async ({ page }) => {
34
- await page.route("**/api/orders", async (route) => {
35
- if (route.request().method() === "POST") {
36
- const postData = route.request().postDataJSON();
37
-
38
- // Add test metadata
39
- const modifiedData = {
40
- ...postData,
41
- testMode: true,
42
- testTimestamp: Date.now(),
43
- };
44
-
45
- await route.continue({
46
- postData: JSON.stringify(modifiedData),
47
- });
48
- } else {
49
- await route.continue();
50
- }
51
- });
52
-
53
- await page.goto("/checkout");
54
- await page.getByRole("button", { name: "Place Order" }).click();
55
- });
56
- ```
57
-
58
- ### Transform Response
59
-
60
- ```typescript
61
- test("modify API response", async ({ page }) => {
62
- await page.route("**/api/products", async (route) => {
63
- // Fetch real response
64
- const response = await route.fetch();
65
- const json = await response.json();
66
-
67
- // Modify response
68
- const modified = json.map((product: any) => ({
69
- ...product,
70
- price: product.price * 0.9, // 10% discount
71
- testMode: true,
72
- }));
73
-
74
- await route.fulfill({
75
- response,
76
- json: modified,
77
- });
78
- });
79
-
80
- await page.goto("/products");
81
- });
82
- ```
83
-
84
- ## GraphQL Mocking
85
-
86
- ### Mock by Operation Name
87
-
88
- ```typescript
89
- test("mock GraphQL query", async ({ page }) => {
90
- await page.route("**/graphql", async (route) => {
91
- const postData = route.request().postDataJSON();
92
-
93
- if (postData.operationName === "GetUser") {
94
- return route.fulfill({
95
- json: {
96
- data: {
97
- user: {
98
- id: "1",
99
- name: "Test User",
100
- email: "test@example.com",
101
- },
102
- },
103
- },
104
- });
105
- }
106
-
107
- if (postData.operationName === "GetProducts") {
108
- return route.fulfill({
109
- json: {
110
- data: {
111
- products: [
112
- { id: "1", name: "Product A", price: 29.99 },
113
- { id: "2", name: "Product B", price: 49.99 },
114
- ],
115
- },
116
- },
117
- });
118
- }
119
-
120
- // Pass through unmocked operations
121
- return route.continue();
122
- });
123
-
124
- await page.goto("/dashboard");
125
- });
126
- ```
127
-
128
- ### GraphQL Mock Fixture
129
-
130
- ```typescript
131
- // fixtures/graphql.fixture.ts
132
- type GraphQLMock = {
133
- operation: string;
134
- variables?: Record<string, any>;
135
- response: { data?: any; errors?: any[] };
136
- };
137
-
138
- type GraphQLFixtures = {
139
- mockGraphQL: (mocks: GraphQLMock[]) => Promise<void>;
140
- };
141
-
142
- export const test = base.extend<GraphQLFixtures>({
143
- mockGraphQL: async ({ page }, use) => {
144
- await use(async (mocks) => {
145
- await page.route("**/graphql", async (route) => {
146
- const postData = route.request().postDataJSON();
147
-
148
- const mock = mocks.find((m) => {
149
- if (m.operation !== postData.operationName) return false;
150
-
151
- // Optionally match variables
152
- if (m.variables) {
153
- return (
154
- JSON.stringify(m.variables) === JSON.stringify(postData.variables)
155
- );
156
- }
157
- return true;
158
- });
159
-
160
- if (mock) {
161
- return route.fulfill({ json: mock.response });
162
- }
163
-
164
- return route.continue();
165
- });
166
- });
167
- },
168
- });
169
-
170
- // Usage
171
- test("dashboard with mocked GraphQL", async ({ page, mockGraphQL }) => {
172
- await mockGraphQL([
173
- {
174
- operation: "GetDashboardStats",
175
- response: {
176
- data: { stats: { users: 100, revenue: 50000 } },
177
- },
178
- },
179
- {
180
- operation: "GetUser",
181
- variables: { id: "1" },
182
- response: {
183
- data: { user: { id: "1", name: "John" } },
184
- },
185
- },
186
- ]);
187
-
188
- await page.goto("/dashboard");
189
- await expect(page.getByText("100 users")).toBeVisible();
190
- });
191
- ```
192
-
193
- ### Mock GraphQL Mutations
194
-
195
- ```typescript
196
- test("mock GraphQL mutation", async ({ page }) => {
197
- await page.route("**/graphql", async (route) => {
198
- const postData = route.request().postDataJSON();
199
-
200
- if (postData.operationName === "CreateOrder") {
201
- const { input } = postData.variables;
202
-
203
- return route.fulfill({
204
- json: {
205
- data: {
206
- createOrder: {
207
- id: "order-123",
208
- status: "PENDING",
209
- items: input.items,
210
- total: input.items.reduce(
211
- (sum: number, item: any) => sum + item.price * item.quantity,
212
- 0,
213
- ),
214
- },
215
- },
216
- },
217
- });
218
- }
219
-
220
- return route.continue();
221
- });
222
-
223
- await page.goto("/checkout");
224
- await page.getByRole("button", { name: "Place Order" }).click();
225
-
226
- await expect(page.getByText("Order #order-123")).toBeVisible();
227
- });
228
- ```
229
-
230
- ## HAR Recording & Playback
231
-
232
- ### Record HAR File
233
-
234
- ```typescript
235
- // Record network traffic
236
- test("record HAR", async ({ page, context }) => {
237
- // Start recording
238
- await context.routeFromHAR("./recordings/checkout.har", {
239
- update: true, // Create/update HAR file
240
- url: "**/api/**",
241
- });
242
-
243
- await page.goto("/checkout");
244
- await page.getByRole("button", { name: "Place Order" }).click();
245
-
246
- // HAR file is saved automatically
247
- });
248
- ```
249
-
250
- ### Playback HAR File
251
-
252
- ```typescript
253
- // Use recorded HAR for offline testing
254
- test("playback HAR", async ({ page, context }) => {
255
- await context.routeFromHAR("./recordings/checkout.har", {
256
- url: "**/api/**",
257
- update: false, // Don't update, just playback
258
- });
259
-
260
- await page.goto("/checkout");
261
-
262
- // All API calls served from HAR file
263
- await expect(page.getByText("Order confirmed")).toBeVisible();
264
- });
265
- ```
266
-
267
- ### HAR with Fallback
268
-
269
- ```typescript
270
- test("HAR with live fallback", async ({ page, context }) => {
271
- await context.routeFromHAR("./recordings/api.har", {
272
- url: "**/api/**",
273
- update: false,
274
- notFound: "fallback", // Use real network if not in HAR
275
- });
276
-
277
- await page.goto("/dashboard");
278
- });
279
- ```
280
-
281
- ## Conditional Mocking
282
-
283
- ### Mock Based on Request Body
284
-
285
- ```typescript
286
- test("conditional mock by body", async ({ page }) => {
287
- await page.route("**/api/search", async (route) => {
288
- const body = route.request().postDataJSON();
289
-
290
- if (body.query === "error") {
291
- return route.fulfill({
292
- status: 500,
293
- json: { error: "Search failed" },
294
- });
295
- }
296
-
297
- if (body.query === "empty") {
298
- return route.fulfill({
299
- json: { results: [] },
300
- });
301
- }
302
-
303
- // Default response
304
- return route.fulfill({
305
- json: {
306
- results: [{ id: 1, title: `Result for: ${body.query}` }],
307
- },
308
- });
309
- });
310
-
311
- await page.goto("/search");
312
-
313
- // Test different scenarios
314
- await page.getByLabel("Search").fill("error");
315
- await page.getByLabel("Search").press("Enter");
316
- await expect(page.getByText("Search failed")).toBeVisible();
317
- });
318
- ```
319
-
320
- ### Mock Nth Request
321
-
322
- ```typescript
323
- test("different response on retry", async ({ page }) => {
324
- let callCount = 0;
325
-
326
- await page.route("**/api/status", (route) => {
327
- callCount++;
328
-
329
- if (callCount < 3) {
330
- return route.fulfill({
331
- status: 503,
332
- json: { error: "Service unavailable" },
333
- });
334
- }
335
-
336
- // Succeed on 3rd attempt
337
- return route.fulfill({
338
- json: { status: "ok" },
339
- });
340
- });
341
-
342
- await page.goto("/dashboard");
343
-
344
- // App should retry and eventually succeed
345
- await expect(page.getByText("Connected")).toBeVisible();
346
- });
347
- ```
348
-
349
- ### Mock with Delay
350
-
351
- ```typescript
352
- test("slow network simulation", async ({ page }) => {
353
- await page.route("**/api/data", async (route) => {
354
- // Simulate 2 second delay
355
- await new Promise((resolve) => setTimeout(resolve, 2000));
356
-
357
- return route.fulfill({
358
- json: { data: "loaded" },
359
- });
360
- });
361
-
362
- await page.goto("/dashboard");
363
-
364
- // Loading state should appear
365
- await expect(page.getByText("Loading...")).toBeVisible();
366
-
367
- // Then data appears
368
- await expect(page.getByText("loaded")).toBeVisible();
369
- });
370
- ```
371
-
372
- ## Network Throttling
373
-
374
- ### Slow 3G Simulation
375
-
376
- ```typescript
377
- test("slow network experience", async ({ page, context }) => {
378
- // Create CDP session for network throttling
379
- const client = await context.newCDPSession(page);
380
-
381
- await client.send("Network.emulateNetworkConditions", {
382
- offline: false,
383
- downloadThroughput: (500 * 1024) / 8, // 500 Kbps
384
- uploadThroughput: (500 * 1024) / 8,
385
- latency: 400, // 400ms
386
- });
387
-
388
- await page.goto("/");
389
-
390
- // Test loading states appear
391
- await expect(page.getByTestId("skeleton-loader")).toBeVisible();
392
- });
393
- ```
394
-
395
- ### Offline Mode
396
-
397
- Use `context.setOffline(true/false)` to simulate network connectivity changes.
398
-
399
- > **For comprehensive offline testing patterns:**
400
- >
401
- > - **Network failure simulation** (error recovery, graceful degradation): See [error-testing.md](error-testing.md#offline-testing)
402
- > - **Offline-first/PWA testing** (service workers, caching, background sync): See [service-workers.md](service-workers.md#offline-testing)
403
-
404
- ### Network Throttling Fixture
405
-
406
- ```typescript
407
- // fixtures/network.fixture.ts
408
- type NetworkCondition = "slow3g" | "fast3g" | "offline";
409
-
410
- const conditions = {
411
- slow3g: { downloadThroughput: 50000, uploadThroughput: 50000, latency: 2000 },
412
- fast3g: { downloadThroughput: 180000, uploadThroughput: 75000, latency: 150 },
413
- };
414
-
415
- type NetworkFixtures = {
416
- setNetworkCondition: (condition: NetworkCondition) => Promise<void>;
417
- };
418
-
419
- export const test = base.extend<NetworkFixtures>({
420
- setNetworkCondition: async ({ page, context }, use) => {
421
- const client = await context.newCDPSession(page);
422
-
423
- await use(async (condition) => {
424
- if (condition === "offline") {
425
- await context.setOffline(true);
426
- } else {
427
- await client.send("Network.emulateNetworkConditions", {
428
- offline: false,
429
- ...conditions[condition],
430
- });
431
- }
432
- });
433
-
434
- // Reset
435
- await context.setOffline(false);
436
- },
437
- });
438
- ```
439
-
440
- ## Anti-Patterns to Avoid
441
-
442
- | Anti-Pattern | Problem | Solution |
443
- | ------------------------ | ------------------------------ | -------------------------------- |
444
- | Mocking all requests | Tests don't reflect reality | Mock only what's necessary |
445
- | No cleanup of routes | Routes persist across tests | Use fixtures with cleanup |
446
- | Ignoring request method | Mock applies to wrong requests | Check `route.request().method()` |
447
- | Hardcoded mock responses | Brittle, hard to maintain | Use factories for mock data |
448
-
449
- ## Related References
450
-
451
- - **Basic Mocking**: See [test-suite-structure.md](../core/test-suite-structure.md) for simple mocking
452
- - **WebSockets**: See [websockets.md](../browser-apis/websockets.md) for real-time mocking