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,420 +0,0 @@
1
- # Browser Console & JavaScript Error Handling
2
-
3
- ## Table of Contents
4
-
5
- 1. [Capturing Console Messages](#capturing-console-messages)
6
- 2. [Failing on Console Errors](#failing-on-console-errors)
7
- 3. [JavaScript Error Detection](#javascript-error-detection)
8
- 4. [Monitoring Warnings](#monitoring-warnings)
9
- 5. [Console Fixtures](#console-fixtures)
10
-
11
- ## Capturing Console Messages
12
-
13
- ### Basic Console Capture
14
-
15
- ```typescript
16
- test("capture console logs", async ({ page }) => {
17
- const logs: string[] = [];
18
-
19
- page.on("console", (msg) => {
20
- logs.push(`${msg.type()}: ${msg.text()}`);
21
- });
22
-
23
- await page.goto("/");
24
-
25
- // Check what was logged
26
- console.log("Captured logs:", logs);
27
- });
28
- ```
29
-
30
- ### Capture by Type
31
-
32
- ```typescript
33
- test("capture specific console types", async ({ page }) => {
34
- const errors: string[] = [];
35
- const warnings: string[] = [];
36
- const infos: string[] = [];
37
-
38
- page.on("console", (msg) => {
39
- switch (msg.type()) {
40
- case "error":
41
- errors.push(msg.text());
42
- break;
43
- case "warning":
44
- warnings.push(msg.text());
45
- break;
46
- case "info":
47
- case "log":
48
- infos.push(msg.text());
49
- break;
50
- }
51
- });
52
-
53
- await page.goto("/dashboard");
54
-
55
- expect(errors).toHaveLength(0);
56
- console.log("Warnings:", warnings);
57
- });
58
- ```
59
-
60
- ### Capture with Stack Trace
61
-
62
- ```typescript
63
- test("capture errors with location", async ({ page }) => {
64
- const errors: { message: string; location?: string }[] = [];
65
-
66
- page.on("console", async (msg) => {
67
- if (msg.type() === "error") {
68
- const location = msg.location();
69
- errors.push({
70
- message: msg.text(),
71
- location: location
72
- ? `${location.url}:${location.lineNumber}`
73
- : undefined,
74
- });
75
- }
76
- });
77
-
78
- await page.goto("/buggy-page");
79
-
80
- // Log errors with source location
81
- errors.forEach((e) => {
82
- console.log(`Error: ${e.message}`);
83
- if (e.location) console.log(` at ${e.location}`);
84
- });
85
- });
86
- ```
87
-
88
- ## Failing on Console Errors
89
-
90
- ### Fail Test on Any Error
91
-
92
- ```typescript
93
- test("no console errors allowed", async ({ page }) => {
94
- const errors: string[] = [];
95
-
96
- page.on("console", (msg) => {
97
- if (msg.type() === "error") {
98
- errors.push(msg.text());
99
- }
100
- });
101
-
102
- await page.goto("/");
103
- await page.getByRole("button", { name: "Load Data" }).click();
104
-
105
- // Fail if any console errors
106
- expect(errors, `Console errors found:\n${errors.join("\n")}`).toHaveLength(0);
107
- });
108
- ```
109
-
110
- ### Fail with Allowed Exceptions
111
-
112
- ```typescript
113
- test("no unexpected console errors", async ({ page }) => {
114
- const allowedErrors = [
115
- /Failed to load resource.*favicon/,
116
- /ResizeObserver loop/,
117
- ];
118
-
119
- const unexpectedErrors: string[] = [];
120
-
121
- page.on("console", (msg) => {
122
- if (msg.type() === "error") {
123
- const text = msg.text();
124
- const isAllowed = allowedErrors.some((pattern) => pattern.test(text));
125
- if (!isAllowed) {
126
- unexpectedErrors.push(text);
127
- }
128
- }
129
- });
130
-
131
- await page.goto("/");
132
-
133
- expect(
134
- unexpectedErrors,
135
- `Unexpected console errors:\n${unexpectedErrors.join("\n")}`,
136
- ).toHaveLength(0);
137
- });
138
- ```
139
-
140
- ### Auto-Fail Fixture
141
-
142
- ```typescript
143
- // fixtures/console.fixture.ts
144
- type ConsoleFixtures = {
145
- failOnConsoleError: void;
146
- };
147
-
148
- export const test = base.extend<ConsoleFixtures>({
149
- failOnConsoleError: [
150
- async ({ page }, use, testInfo) => {
151
- const errors: string[] = [];
152
-
153
- page.on("console", (msg) => {
154
- if (msg.type() === "error") {
155
- errors.push(msg.text());
156
- }
157
- });
158
-
159
- await use();
160
-
161
- // After test, check for errors
162
- if (errors.length > 0) {
163
- testInfo.annotations.push({
164
- type: "console-errors",
165
- description: errors.join("\n"),
166
- });
167
- throw new Error(`Console errors detected:\n${errors.join("\n")}`);
168
- }
169
- },
170
- { auto: true }, // Runs for every test
171
- ],
172
- });
173
- ```
174
-
175
- ## JavaScript Error Detection
176
-
177
- ### Catch Uncaught Exceptions
178
-
179
- ```typescript
180
- test("no uncaught exceptions", async ({ page }) => {
181
- const pageErrors: Error[] = [];
182
-
183
- page.on("pageerror", (error) => {
184
- pageErrors.push(error);
185
- });
186
-
187
- await page.goto("/");
188
- await page.getByRole("button", { name: "Trigger Action" }).click();
189
-
190
- expect(
191
- pageErrors,
192
- `Uncaught exceptions:\n${pageErrors.map((e) => e.message).join("\n")}`,
193
- ).toHaveLength(0);
194
- });
195
- ```
196
-
197
- ### Capture Error Details
198
-
199
- ```typescript
200
- test("capture JS error details", async ({ page }) => {
201
- const errors: { message: string; stack?: string }[] = [];
202
-
203
- page.on("pageerror", (error) => {
204
- errors.push({
205
- message: error.message,
206
- stack: error.stack,
207
- });
208
- });
209
-
210
- await page.goto("/error-page");
211
-
212
- if (errors.length > 0) {
213
- console.log("JavaScript errors:");
214
- errors.forEach((e) => {
215
- console.log(` Message: ${e.message}`);
216
- console.log(` Stack: ${e.stack}`);
217
- });
218
- }
219
- });
220
- ```
221
-
222
- ### Test Error Boundary Triggers
223
-
224
- ```typescript
225
- test("error boundary catches render error", async ({ page }) => {
226
- let errorCaught = false;
227
-
228
- page.on("pageerror", () => {
229
- // Note: React error boundaries catch errors before they become pageerrors
230
- // This would only fire for unhandled errors
231
- errorCaught = true;
232
- });
233
-
234
- // Trigger component error via props
235
- await page.route(
236
- "**/api/data",
237
- (route) => route.fulfill({ json: null }), // Will cause "cannot read property of null"
238
- );
239
-
240
- await page.goto("/dashboard");
241
-
242
- // Error boundary should show fallback, not crash
243
- await expect(page.getByText("Something went wrong")).toBeVisible();
244
- expect(errorCaught).toBe(false); // Error was caught by boundary
245
- });
246
- ```
247
-
248
- ## Monitoring Warnings
249
-
250
- ### Capture Deprecation Warnings
251
-
252
- ```typescript
253
- test("no deprecation warnings", async ({ page }) => {
254
- const deprecations: string[] = [];
255
-
256
- page.on("console", (msg) => {
257
- const text = msg.text();
258
- if (
259
- msg.type() === "warning" &&
260
- (text.includes("deprecated") || text.includes("Deprecation"))
261
- ) {
262
- deprecations.push(text);
263
- }
264
- });
265
-
266
- await page.goto("/");
267
-
268
- if (deprecations.length > 0) {
269
- console.warn("Deprecation warnings found:");
270
- deprecations.forEach((d) => console.warn(` - ${d}`));
271
- }
272
-
273
- // Optionally fail
274
- // expect(deprecations).toHaveLength(0);
275
- });
276
- ```
277
-
278
- ### React Development Warnings
279
-
280
- ```typescript
281
- test("no React warnings", async ({ page }) => {
282
- const reactWarnings: string[] = [];
283
-
284
- page.on("console", (msg) => {
285
- const text = msg.text();
286
- if (
287
- msg.type() === "warning" &&
288
- (text.includes("Warning:") || text.includes("React"))
289
- ) {
290
- reactWarnings.push(text);
291
- }
292
- });
293
-
294
- await page.goto("/");
295
-
296
- // Common React warnings to check
297
- const criticalWarnings = reactWarnings.filter(
298
- (w) =>
299
- w.includes("Each child in a list should have a unique") ||
300
- w.includes("Cannot update a component") ||
301
- w.includes("Can't perform a React state update"),
302
- );
303
-
304
- expect(
305
- criticalWarnings,
306
- `React warnings:\n${criticalWarnings.join("\n")}`,
307
- ).toHaveLength(0);
308
- });
309
- ```
310
-
311
- ## Console Fixtures
312
-
313
- ### Comprehensive Console Fixture
314
-
315
- ```typescript
316
- // fixtures/console.fixture.ts
317
- type ConsoleMessage = {
318
- type: string;
319
- text: string;
320
- location?: { url: string; line: number };
321
- timestamp: number;
322
- };
323
-
324
- type ConsoleFixtures = {
325
- consoleMessages: ConsoleMessage[];
326
- getConsoleErrors: () => ConsoleMessage[];
327
- getConsoleWarnings: () => ConsoleMessage[];
328
- assertNoErrors: (allowedPatterns?: RegExp[]) => void;
329
- };
330
-
331
- export const test = base.extend<ConsoleFixtures>({
332
- consoleMessages: async ({ page }, use) => {
333
- const messages: ConsoleMessage[] = [];
334
-
335
- page.on("console", (msg) => {
336
- const location = msg.location();
337
- messages.push({
338
- type: msg.type(),
339
- text: msg.text(),
340
- location: location
341
- ? { url: location.url, line: location.lineNumber }
342
- : undefined,
343
- timestamp: Date.now(),
344
- });
345
- });
346
-
347
- await use(messages);
348
- },
349
-
350
- getConsoleErrors: async ({ consoleMessages }, use) => {
351
- await use(() => consoleMessages.filter((m) => m.type === "error"));
352
- },
353
-
354
- getConsoleWarnings: async ({ consoleMessages }, use) => {
355
- await use(() => consoleMessages.filter((m) => m.type === "warning"));
356
- },
357
-
358
- assertNoErrors: async ({ getConsoleErrors }, use) => {
359
- await use((allowedPatterns = []) => {
360
- const errors = getConsoleErrors();
361
- const unexpected = errors.filter(
362
- (e) => !allowedPatterns.some((p) => p.test(e.text)),
363
- );
364
-
365
- if (unexpected.length > 0) {
366
- throw new Error(
367
- `Unexpected console errors:\n${unexpected.map((e) => e.text).join("\n")}`,
368
- );
369
- }
370
- });
371
- },
372
- });
373
-
374
- // Usage
375
- test("page loads without errors", async ({ page, assertNoErrors }) => {
376
- await page.goto("/dashboard");
377
- await page.getByRole("button", { name: "Load" }).click();
378
-
379
- assertNoErrors([/favicon/]); // Allow favicon errors
380
- });
381
- ```
382
-
383
- ### Attach Console to Report
384
-
385
- ```typescript
386
- test("capture console for debugging", async ({ page }, testInfo) => {
387
- const logs: string[] = [];
388
-
389
- page.on("console", (msg) => {
390
- logs.push(`[${msg.type()}] ${msg.text()}`);
391
- });
392
-
393
- page.on("pageerror", (error) => {
394
- logs.push(`[EXCEPTION] ${error.message}`);
395
- });
396
-
397
- await page.goto("/");
398
- // ... test actions
399
-
400
- // Attach console log to test report
401
- await testInfo.attach("console-log", {
402
- body: logs.join("\n"),
403
- contentType: "text/plain",
404
- });
405
- });
406
- ```
407
-
408
- ## Anti-Patterns to Avoid
409
-
410
- | Anti-Pattern | Problem | Solution |
411
- | -------------------------- | -------------------------- | --------------------------- |
412
- | Ignoring console errors | Bugs go unnoticed | Check for errors in tests |
413
- | Too strict error checking | Tests fail on minor issues | Allow known/expected errors |
414
- | Not capturing stack traces | Hard to debug | Include location info |
415
- | Checking only at end | Miss errors during actions | Capture continuously |
416
-
417
- ## Related References
418
-
419
- - **Debugging**: See [debugging.md](debugging.md) for troubleshooting
420
- - **Error Testing**: See [error-testing.md](error-testing.md) for error scenarios