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,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