@testspectra/cli 1.0.70 → 1.1.1

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 (277) hide show
  1. package/LICENSE.md +48 -0
  2. package/README.md +36 -270
  3. package/bin/.testspectra-runner.hash +1 -0
  4. package/bin/spectra.js +1 -1
  5. package/bin/testspectra-runner +0 -0
  6. package/demo-app/assets/index-DPfv5_EF.js +116 -0
  7. package/demo-app/assets/index-gIwu2EMV.css +1 -0
  8. package/demo-app/index.html +2 -2
  9. package/dist/.tsbuildinfo +1 -0
  10. package/dist/commands/__tests__/cloud-run.test.d.ts +1 -0
  11. package/dist/commands/__tests__/cloud-run.test.js +93 -0
  12. package/dist/commands/__tests__/doctor.test.d.ts +1 -0
  13. package/dist/commands/__tests__/doctor.test.js +39 -0
  14. package/dist/commands/__tests__/init.test.d.ts +1 -0
  15. package/dist/commands/__tests__/init.test.js +148 -0
  16. package/dist/commands/__tests__/license.test.d.ts +1 -0
  17. package/dist/commands/__tests__/license.test.js +13 -0
  18. package/dist/commands/__tests__/refactor.test.d.ts +1 -0
  19. package/dist/commands/__tests__/refactor.test.js +64 -0
  20. package/dist/commands/__tests__/run-e2e.test.d.ts +1 -0
  21. package/dist/commands/__tests__/run-e2e.test.js +181 -0
  22. package/dist/commands/__tests__/run.test.d.ts +1 -0
  23. package/dist/commands/__tests__/run.test.js +197 -0
  24. package/dist/commands/__tests__/watch.test.d.ts +1 -0
  25. package/dist/commands/__tests__/watch.test.js +155 -0
  26. package/dist/commands/add.js +86 -85
  27. package/dist/commands/cloud-run.d.ts +11 -0
  28. package/dist/commands/cloud-run.js +118 -0
  29. package/dist/commands/demo.js +7 -7
  30. package/dist/commands/devices.d.ts +14 -2
  31. package/dist/commands/devices.js +44 -34
  32. package/dist/commands/doctor.d.ts +3 -1
  33. package/dist/commands/doctor.js +43 -264
  34. package/dist/commands/init.d.ts +1 -1
  35. package/dist/commands/init.js +206 -196
  36. package/dist/commands/install.d.ts +4 -0
  37. package/dist/commands/install.js +59 -0
  38. package/dist/commands/license.d.ts +4 -0
  39. package/dist/commands/license.js +30 -0
  40. package/dist/commands/refactor.d.ts +8 -0
  41. package/dist/commands/refactor.js +78 -0
  42. package/dist/commands/run.d.ts +22 -1
  43. package/dist/commands/run.js +252 -109
  44. package/dist/commands/sync-types.d.ts +4 -0
  45. package/dist/commands/sync-types.js +14 -0
  46. package/dist/commands/update.js +39 -43
  47. package/dist/commands/watch.d.ts +6 -0
  48. package/dist/commands/watch.js +47 -43
  49. package/dist/config/loader.d.ts +1 -1
  50. package/dist/config/loader.js +40 -25
  51. package/dist/config/schema.d.ts +117 -49
  52. package/dist/config/schema.js +41 -34
  53. package/dist/generator/__tests__/tsconfig-isolation.test.d.ts +1 -0
  54. package/dist/generator/__tests__/tsconfig-isolation.test.js +278 -0
  55. package/dist/generator/__tests__/type-generator.test.d.ts +1 -0
  56. package/dist/generator/__tests__/type-generator.test.js +386 -0
  57. package/dist/generator/index.d.ts +2 -0
  58. package/dist/generator/index.js +2 -0
  59. package/dist/generator/tsconfig-generator.d.ts +27 -0
  60. package/dist/generator/tsconfig-generator.js +391 -0
  61. package/dist/generator/type-generator.d.ts +36 -0
  62. package/dist/generator/type-generator.js +644 -0
  63. package/dist/index.d.ts +9 -5
  64. package/dist/index.js +124 -51
  65. package/dist/lifecycle/__tests__/lifecycle-engine.test.d.ts +1 -0
  66. package/dist/lifecycle/__tests__/lifecycle-engine.test.js +290 -0
  67. package/dist/lifecycle/hook-discovery.d.ts +24 -0
  68. package/dist/lifecycle/hook-discovery.js +60 -0
  69. package/dist/lifecycle/hook-dispatcher.d.ts +34 -0
  70. package/dist/lifecycle/hook-dispatcher.js +190 -0
  71. package/dist/lifecycle/index.d.ts +3 -0
  72. package/dist/lifecycle/index.js +3 -0
  73. package/dist/lifecycle/parallel-grouping.d.ts +27 -0
  74. package/dist/lifecycle/parallel-grouping.js +151 -0
  75. package/dist/mobile/__tests__/android-device-e2e.test.d.ts +1 -0
  76. package/dist/mobile/__tests__/android-device-e2e.test.js +53 -0
  77. package/dist/mobile/__tests__/device-pool.test.d.ts +1 -0
  78. package/dist/mobile/__tests__/device-pool.test.js +97 -0
  79. package/dist/mobile/device-pool.d.ts +23 -0
  80. package/dist/mobile/device-pool.js +1 -0
  81. package/dist/mobile/index.d.ts +1 -0
  82. package/dist/mobile/index.js +1 -0
  83. package/dist/refactor/__tests__/refactor-engine.test.d.ts +1 -0
  84. package/dist/refactor/__tests__/refactor-engine.test.js +175 -0
  85. package/dist/refactor/index.d.ts +1 -0
  86. package/dist/refactor/index.js +1 -0
  87. package/dist/refactor/refactor-engine.d.ts +25 -0
  88. package/dist/refactor/refactor-engine.js +255 -0
  89. package/dist/reporter/__tests__/semantic-formatter.test.d.ts +1 -0
  90. package/dist/reporter/__tests__/semantic-formatter.test.js +73 -0
  91. package/dist/reporter/semantic-formatter.d.ts +6 -0
  92. package/dist/reporter/semantic-formatter.js +191 -0
  93. package/dist/reporter/summary-view.d.ts +12 -0
  94. package/dist/reporter/summary-view.js +19 -0
  95. package/dist/reporter/terminal-stream.d.ts +32 -0
  96. package/dist/reporter/terminal-stream.js +82 -0
  97. package/dist/reporter/types.d.ts +2 -0
  98. package/dist/reporter/types.js +1 -0
  99. package/dist/runner/bridge.d.ts +10 -5
  100. package/dist/runner/bridge.js +69 -44
  101. package/dist/runner/reporter.d.ts +30 -2
  102. package/dist/runner/reporter.js +419 -13
  103. package/dist/server/demo.js +43 -44
  104. package/dist/types/generator.d.ts +1 -17
  105. package/dist/types/generator.js +1 -443
  106. package/dist/utils/demo-server.js +38 -35
  107. package/package.json +20 -12
  108. package/templates/default/CLAUDE.md +7 -5
  109. package/templates/default/fixtures/apiData.json +24 -0
  110. package/templates/default/package.json +13 -4
  111. package/templates/default/page-objects/MatchersPage/mobile.ts +41 -16
  112. package/templates/default/page-objects/MatchersPage/web.ts +14 -0
  113. package/templates/default/page-objects/NavigationPage/mobile.ts +10 -1
  114. package/templates/default/page-objects/PlaygroundPage/mobile.ts +27 -17
  115. package/templates/default/page-objects/PlaygroundPage/web.ts +2 -0
  116. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +11 -0
  117. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +12 -0
  118. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -0
  119. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +16 -0
  120. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/spec.md +12 -0
  121. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -0
  122. package/templates/default/specs/ApiInterception/suite.md +9 -0
  123. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +7 -1
  124. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  125. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +15 -1
  126. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +14 -4
  127. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +9 -1
  128. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +8 -3
  129. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +9 -1
  130. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  131. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +27 -1
  132. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  133. package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +4 -1
  134. package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +3 -3
  135. package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +4 -1
  136. package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +2 -2
  137. package/templates/default/spectra.config.ts +21 -14
  138. package/templates/default/support/actions/fillCredentials/mobile.action.ts +2 -2
  139. package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +2 -0
  140. package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +2 -2
  141. package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +3 -1
  142. package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +3 -3
  143. package/templates/default/tsconfig.json +3 -1
  144. package/templates/nx/.nx/workspace-data/d/daemon.log +168 -0
  145. package/templates/nx/CLAUDE.md +2 -2
  146. package/templates/nx/package.json +7 -5
  147. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +3 -0
  148. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +12 -0
  149. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -0
  150. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +3 -0
  151. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/spec.md +12 -0
  152. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -0
  153. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/suite.md +9 -0
  154. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +17 -3
  155. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +14 -4
  156. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +8 -3
  157. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +9 -3
  158. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +27 -6
  159. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +3 -3
  160. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +2 -2
  161. package/templates/nx/pnpm-lock.yaml +6663 -0
  162. package/templates/nx/pnpm-workspace.yaml +2 -1
  163. package/templates/nx/shared/testing/fixtures/apiData.json +24 -0
  164. package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +12 -0
  165. package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +14 -0
  166. package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +2 -0
  167. package/templates/nx/shared/testing/project.json +19 -0
  168. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +2 -2
  169. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +1 -1
  170. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +3 -3
  171. package/templates/nx/spectra.config.ts +19 -12
  172. package/templates/nx/tsconfig.json +3 -1
  173. package/demo-app/assets/index-DAUlrHTr.css +0 -1
  174. package/demo-app/assets/index-DN2Kb0A8.js +0 -100
  175. package/dist/index.cjs +0 -101
  176. package/dist/plugin.cjs +0 -575
  177. package/dist/plugin.d.ts +0 -16
  178. package/dist/plugin.js +0 -184
  179. package/dist/step/index.d.ts +0 -6
  180. package/dist/step/index.js +0 -6
  181. package/dist/step/matchers.d.ts +0 -14
  182. package/dist/step/matchers.js +0 -114
  183. package/dist/step/proto.d.ts +0 -46
  184. package/dist/step/proto.js +0 -114
  185. package/dist/step/runner/collection.d.ts +0 -13
  186. package/dist/step/runner/collection.js +0 -51
  187. package/dist/step/runner/single.d.ts +0 -21
  188. package/dist/step/runner/single.js +0 -138
  189. package/dist/step/spectra.d.ts +0 -34
  190. package/dist/step/spectra.js +0 -156
  191. package/dist/step/types.d.ts +0 -32
  192. package/dist/step/types.js +0 -5
  193. package/templates/default/tsconfig.spectra.android.json +0 -46
  194. package/templates/default/tsconfig.spectra.ios.json +0 -46
  195. package/templates/default/tsconfig.spectra.json +0 -22
  196. package/templates/default/tsconfig.spectra.web.json +0 -53
  197. package/templates/nx/fixtures/playgroundData.json +0 -7
  198. package/templates/nx/global-hooks/after/mobile.hook.ts +0 -3
  199. package/templates/nx/global-hooks/after/web.hook.ts +0 -3
  200. package/templates/nx/global-hooks/before/mobile.hook.ts +0 -3
  201. package/templates/nx/global-hooks/before/web.hook.ts +0 -3
  202. package/templates/nx/page-objects/MatchersPage/mobile.ts +0 -21
  203. package/templates/nx/page-objects/MatchersPage/web.ts +0 -23
  204. package/templates/nx/page-objects/NavigationPage/mobile.ts +0 -5
  205. package/templates/nx/page-objects/NavigationPage/web.ts +0 -8
  206. package/templates/nx/page-objects/PlaygroundPage/mobile.ts +0 -26
  207. package/templates/nx/page-objects/PlaygroundPage/web.ts +0 -29
  208. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +0 -3
  209. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +0 -12
  210. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +0 -5
  211. package/templates/nx/specs/BrowserContext/suite.md +0 -9
  212. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +0 -3
  213. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/spec.md +0 -12
  214. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +0 -7
  215. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +0 -3
  216. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +0 -12
  217. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +0 -6
  218. package/templates/nx/specs/ContentMatchers/suite.md +0 -9
  219. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +0 -3
  220. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +0 -12
  221. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +0 -5
  222. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +0 -3
  223. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +0 -12
  224. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +0 -8
  225. package/templates/nx/specs/ElementMatchers/hooks/after/mobile.hook.ts +0 -1
  226. package/templates/nx/specs/ElementMatchers/hooks/after/web.hook.ts +0 -1
  227. package/templates/nx/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +0 -1
  228. package/templates/nx/specs/ElementMatchers/hooks/afterEach/web.hook.ts +0 -1
  229. package/templates/nx/specs/ElementMatchers/hooks/before/mobile.hook.ts +0 -1
  230. package/templates/nx/specs/ElementMatchers/hooks/before/web.hook.ts +0 -1
  231. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +0 -1
  232. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +0 -1
  233. package/templates/nx/specs/ElementMatchers/suite.md +0 -9
  234. package/templates/nx/specs/Playground/TC-0001-form-controls/mobile.test.ts +0 -3
  235. package/templates/nx/specs/Playground/TC-0001-form-controls/spec.md +0 -12
  236. package/templates/nx/specs/Playground/TC-0001-form-controls/web.test.ts +0 -6
  237. package/templates/nx/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +0 -3
  238. package/templates/nx/specs/Playground/TC-0002-toggle-elements/spec.md +0 -12
  239. package/templates/nx/specs/Playground/TC-0002-toggle-elements/web.test.ts +0 -6
  240. package/templates/nx/specs/Playground/hooks/after/mobile.hook.ts +0 -1
  241. package/templates/nx/specs/Playground/hooks/after/web.hook.ts +0 -1
  242. package/templates/nx/specs/Playground/hooks/afterEach/mobile.hook.ts +0 -1
  243. package/templates/nx/specs/Playground/hooks/afterEach/web.hook.ts +0 -1
  244. package/templates/nx/specs/Playground/hooks/before/mobile.hook.ts +0 -1
  245. package/templates/nx/specs/Playground/hooks/before/web.hook.ts +0 -1
  246. package/templates/nx/specs/Playground/hooks/beforeEach/mobile.hook.ts +0 -1
  247. package/templates/nx/specs/Playground/hooks/beforeEach/web.hook.ts +0 -1
  248. package/templates/nx/specs/Playground/suite.md +0 -9
  249. package/templates/nx/support/actions/fillCredentials/mobile.action.ts +0 -4
  250. package/templates/nx/support/actions/fillCredentials/web.action.ts +0 -4
  251. package/templates/nx/support/steps/togglePlaygroundStates/mobile.step.ts +0 -3
  252. package/templates/nx/support/steps/togglePlaygroundStates/step.md +0 -7
  253. package/templates/nx/support/steps/togglePlaygroundStates/web.step.ts +0 -5
  254. package/templates/nx/support/steps/verifyPlaygroundState/mobile.step.ts +0 -4
  255. package/templates/nx/support/steps/verifyPlaygroundState/step.md +0 -7
  256. package/templates/nx/support/steps/verifyPlaygroundState/web.step.ts +0 -6
  257. package/templates/nx/tsconfig.spectra.android.json +0 -39
  258. package/templates/nx/tsconfig.spectra.ios.json +0 -39
  259. package/templates/nx/tsconfig.spectra.json +0 -25
  260. package/templates/nx/tsconfig.spectra.shared.json +0 -25
  261. package/templates/nx/tsconfig.spectra.web.json +0 -45
  262. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  263. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  264. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  265. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  266. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  267. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  268. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  269. /package/templates/{nx/specs/BrowserContext → default/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
  270. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/mobile.hook.ts +0 -0
  271. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/after/web.hook.ts +0 -0
  272. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/mobile.hook.ts +0 -0
  273. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/afterEach/web.hook.ts +0 -0
  274. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/mobile.hook.ts +0 -0
  275. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/before/web.hook.ts +0 -0
  276. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/mobile.hook.ts +0 -0
  277. /package/templates/nx/{specs/ContentMatchers → packages/matchers/e2e/specs/ApiInterception}/hooks/beforeEach/web.hook.ts +0 -0
@@ -4,7 +4,7 @@ export default defineConfig({
4
4
  webConfig: {
5
5
  baseUrl: "http://localhost:5173",
6
6
  maxConcurrentSessions: "1",
7
- headlessMode: true,
7
+ headless: true,
8
8
  implicitWait: "5000",
9
9
  pageLoadTimeout: "30000",
10
10
  scriptTimeout: "30000",
@@ -18,32 +18,39 @@ export default defineConfig({
18
18
  },
19
19
  ],
20
20
  androidConfig: {
21
- appiumServer: "http://127.0.0.1:4723",
22
- platformName: "Android",
23
- platformVersion: "13",
24
- deviceName: "emulator-5554",
25
- automationName: "UiAutomator2",
26
- appPackage: "",
27
- appActivity: "",
21
+ driverServer: "tcp://127.0.0.1:8200",
22
+ appPackage: "dev.testspectra.demoapp",
23
+ appActivity: "dev.testspectra.demoapp.MainActivity",
28
24
  autoGrantPermissions: true,
29
25
  noReset: false,
30
26
  implicitWait: "10000",
31
27
  parallelizationMode: "suite",
28
+ devices: [
29
+ {
30
+ id: "emulator-5554",
31
+ name: "Pixel 8a Emulator",
32
+ version: "14.0",
33
+ systemPort: 8200,
34
+ },
35
+ ],
32
36
  },
33
37
  iosConfig: {
34
38
  appiumServer: "http://127.0.0.1:4723",
35
- platformName: "iOS",
36
- platformVersion: "16.0",
37
- deviceName: "iPhone 14",
38
39
  automationName: "XCUITest",
39
40
  bundleId: "",
40
- udid: "auto",
41
- xcodeOrgId: "",
42
- xcodeSigningId: "iPhone Developer",
43
41
  autoAcceptAlerts: true,
44
42
  noReset: false,
45
43
  implicitWait: "10000",
46
44
  parallelizationMode: "suite",
45
+ devices: [
46
+ {
47
+ id: "iphone-15-pro",
48
+ name: "iPhone 15 Pro Simulator",
49
+ version: "17.0",
50
+ udid: "auto",
51
+ wdaLocalPort: 8100,
52
+ },
53
+ ],
47
54
  },
48
55
  loadConfig: {
49
56
  virtualUsers: "10",
@@ -1,4 +1,4 @@
1
1
  export default async function fillCredentials(this: any, email: string, token: string) {
2
- await this.get("~email_input").type(email);
3
- await this.get("~token_input").type(token);
2
+ await this.get("~email-input").type(email);
3
+ await this.get("~token-input").type(token);
4
4
  }
@@ -1,3 +1,5 @@
1
1
  export default async function togglePlaygroundStates() {
2
2
  await PlaygroundPage.open();
3
+ await PlaygroundPage.hiddenElement.shouldBeVisible();
4
+ await PlaygroundPage.existingElement.shouldExist();
3
5
  }
@@ -1,5 +1,5 @@
1
1
  export default async function togglePlaygroundStates() {
2
2
  await PlaygroundPage.open();
3
- await PlaygroundPage.hiddenElement.should("be.visible");
4
- await PlaygroundPage.existingElement.should("exist");
3
+ await PlaygroundPage.hiddenElement.shouldBeVisible();
4
+ await PlaygroundPage.existingElement.shouldExist();
5
5
  }
@@ -1,4 +1,6 @@
1
1
  export default async function verifyPlaygroundState() {
2
2
  await PlaygroundPage.open();
3
- await PlaygroundPage.visibleElement.should("be.visible");
3
+ await PlaygroundPage.visibleElement.shouldBeVisible();
4
+ await PlaygroundPage.enabledButton.shouldBeEnabled();
5
+ await PlaygroundPage.termsCheckbox.shouldBeChecked();
4
6
  }
@@ -1,6 +1,6 @@
1
1
  export default async function verifyPlaygroundState() {
2
2
  await PlaygroundPage.open();
3
- await PlaygroundPage.visibleElement.should("be.visible");
4
- await PlaygroundPage.enabledButton.should("be.enabled");
5
- await PlaygroundPage.termsCheckbox.should("be.checked");
3
+ await PlaygroundPage.visibleElement.shouldBeVisible();
4
+ await PlaygroundPage.enabledButton.shouldBeEnabled();
5
+ await PlaygroundPage.termsCheckbox.shouldBeChecked();
6
6
  }
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "files": [],
3
3
  "references": [
4
- { "path": "./tsconfig.spectra.json" }
4
+ {
5
+ "path": "./.testspectra/tsconfig.json"
6
+ }
5
7
  ]
6
8
  }
@@ -0,0 +1,168 @@
1
+ [NX Daemon Server] - 2026-09-10T02:42:46.664Z - Started listening on: /private/var/folders/hw/dvsryrl10t59sqh3rht8j_pr0000gn/T/091eddd6eaf287d577f0/d.sock
2
+ [NX Daemon Server] - 2026-09-10T02:42:46.668Z - [WATCHER]: Subscribed to changes within: /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (native)
3
+ [NX Daemon Server] - 2026-09-10T02:42:46.671Z - Established a connection. Number of open connections: 1
4
+ [NX Daemon Server] - 2026-09-10T02:42:46.671Z - Established a connection. Number of open connections: 2
5
+ [NX Daemon Server] - 2026-09-10T02:42:46.672Z - Closed a connection. Number of open connections: 1
6
+ [NX Daemon Server] - 2026-09-10T02:42:46.672Z - [REQUEST]: Client Request for Project Graph Received
7
+ [NX Daemon Server] - 2026-09-10T02:42:46.724Z - [WATCHER]: Processing file changes in outputs
8
+ [NX Daemon Server] - 2026-09-10T02:42:46.795Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
9
+ [NX Daemon Server] - 2026-09-10T02:42:46.795Z - [REQUEST]:
10
+ [NX Daemon Server] - 2026-09-10T02:42:46.795Z - [REQUEST]:
11
+ [NX Daemon Server] - 2026-09-10T02:42:46.798Z - Time taken for 'loadNxPlugins' 122.02837499999998ms
12
+
13
+  NX  Failed to parse pnpm lockfile
14
+
15
+ Please open an issue at `https://github.com/nrwl/nx/issues/new?template=1-bug.yml` and provide a reproduction.
16
+
17
+ Original error: Could not find ".modules.yaml" at "/Volumes/Home/Documents/TestSpectra/source/cli/templates/nx/node_modules/.modules.yaml"
18
+
19
+
20
+ Error: Could not find ".modules.yaml" at "/Volumes/Home/Documents/TestSpectra/source/cli/templates/nx/node_modules/.modules.yaml"
21
+ at loadPnpmHoistedDepsDefinition (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/utils/pnpm-normalizer.js:40:15)
22
+ at getNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:213:77)
23
+ at getPnpmLockfileNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:32:12)
24
+ at getLockFileNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/lock-file.js:48:59)
25
+ at exports.createNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/index.js:47:64)
26
+ at /Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/utils.js:47:33
27
+ at Array.map (<anonymous>)
28
+ at createNodesFromFiles (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/utils.js:45:35)
29
+ at LoadedNxPlugin.createNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/internal-api.js:27:76)
30
+ at LoadedNxPlugin.createNodes.<computed> (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/internal-api.js:44:34)
31
+
32
+ [NX Daemon Server] - 2026-09-10T02:42:46.827Z - Time taken for 'build-project-configs' 24.701040999999975ms
33
+ [NX Daemon Server] - 2026-09-10T02:42:46.830Z - [REQUEST]: Responding to the client with an error. Error when preparing serialized project graph. Failed to process project graph. Run "nx reset" to fix this. Please report the issue if you keep seeing it.
34
+ Failed to process project graph. Run "nx reset" to fix this. Please report the issue if you keep seeing it.
35
+ An error occurred while processing files for the nx/js/dependencies-and-lockfile plugin.
36
+ - pnpm-lock.yaml: Could not find ".modules.yaml" at "/Volumes/Home/Documents/TestSpectra/source/cli/templates/nx/node_modules/.modules.yaml"
37
+ Error: Could not find ".modules.yaml" at "/Volumes/Home/Documents/TestSpectra/source/cli/templates/nx/node_modules/.modules.yaml"
38
+ at loadPnpmHoistedDepsDefinition (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/utils/pnpm-normalizer.js:40:15)
39
+ at getNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:213:77)
40
+ at getPnpmLockfileNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:32:12)
41
+ at getLockFileNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/lock-file/lock-file.js:48:59)
42
+ at exports.createNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/plugins/js/index.js:47:64)
43
+ at /Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/utils.js:47:33
44
+ at Array.map (<anonymous>)
45
+ at createNodesFromFiles (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/utils.js:45:35)
46
+ at LoadedNxPlugin.createNodes (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/internal-api.js:27:76)
47
+ at LoadedNxPlugin.createNodes.<computed> (/Volumes/Home/Documents/TestSpectra/source/node_modules/.pnpm/nx@19.8.4/node_modules/nx/src/project-graph/plugins/internal-api.js:44:34)
48
+ [NX Daemon Server] - 2026-09-10T02:42:46.830Z - Time taken for 'total execution time for createProjectGraph()' 3.836250000000007ms
49
+ [NX Daemon Server] - 2026-09-10T02:42:46.830Z - Done responding to the client null
50
+ [NX Daemon Server] - 2026-09-10T02:42:46.830Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 158. Response time: 0.
51
+ [NX Daemon Server] - 2026-09-10T02:42:46.833Z - Closed a connection. Number of open connections: 0
52
+ [NX Daemon Server] - 2026-09-10T02:43:41.011Z - [WATCHER]: Processing file changes in outputs
53
+ [NX Daemon Server] - 2026-09-10T02:43:41.012Z - [WATCHER]: Stopping the watcher for /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (sources)
54
+ [NX Daemon Server] - 2026-09-10T02:43:41.012Z - [WATCHER]: Stopping the watcher for /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (outputs)
55
+ [NX Daemon Server] - 2026-09-10T02:43:41.012Z - Server stopped because: "LOCK_FILES_CHANGED"
56
+ [NX Daemon Server] - 2026-09-10T07:06:59.991Z - Started listening on: /private/var/folders/hw/dvsryrl10t59sqh3rht8j_pr0000gn/T/091eddd6eaf287d577f0/d.sock
57
+ [NX Daemon Server] - 2026-09-10T07:06:59.992Z - [WATCHER]: Subscribed to changes within: /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (native)
58
+ [NX Daemon Server] - 2026-09-10T07:06:59.997Z - Established a connection. Number of open connections: 1
59
+ [NX Daemon Server] - 2026-09-10T07:06:59.998Z - Established a connection. Number of open connections: 2
60
+ [NX Daemon Server] - 2026-09-10T07:06:59.998Z - Closed a connection. Number of open connections: 1
61
+ [NX Daemon Server] - 2026-09-10T07:06:59.999Z - [REQUEST]: Client Request for Project Graph Received
62
+ [NX Daemon Server] - 2026-09-10T07:07:00.053Z - [WATCHER]: Processing file changes in outputs
63
+ [NX Daemon Server] - 2026-09-10T07:07:00.132Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
64
+ [NX Daemon Server] - 2026-09-10T07:07:00.132Z - [REQUEST]:
65
+ [NX Daemon Server] - 2026-09-10T07:07:00.132Z - [REQUEST]:
66
+ [NX Daemon Server] - 2026-09-10T07:07:00.136Z - Time taken for 'loadNxPlugins' 132.789375ms
67
+ [NX Daemon Server] - 2026-09-10T07:07:00.159Z - Time taken for 'build-project-configs' 18.440375000000017ms
68
+ [NX Daemon Server] - 2026-09-10T07:07:00.162Z - [SYNC]: collect registered sync generators
69
+ [NX Daemon Server] - 2026-09-10T07:07:00.162Z - [REQUEST]: Responding to the client. project-graph
70
+ [NX Daemon Server] - 2026-09-10T07:07:00.162Z - Done responding to the client project-graph
71
+ [NX Daemon Server] - 2026-09-10T07:07:00.162Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 163. Response time: 0.
72
+ [NX Daemon Server] - 2026-09-10T07:07:00.162Z - Time taken for 'total for creating and serializing project graph' 163.05229199999997ms
73
+ [NX Daemon Server] - 2026-09-10T07:07:00.203Z - [REQUEST]: Responding to the client. handleHashTasks
74
+ [NX Daemon Server] - 2026-09-10T07:07:00.203Z - Done responding to the client handleHashTasks
75
+ [NX Daemon Server] - 2026-09-10T07:07:00.203Z - Handled HASH_TASKS. Handling time: 1. Response time: 0.
76
+ [NX Daemon Server] - 2026-09-10T07:07:00.208Z - Closed a connection. Number of open connections: 0
77
+ [NX Daemon Server] - 2026-09-10T07:07:55.071Z - [WATCHER]: Processing file changes in outputs
78
+ [NX Daemon Server] - 2026-09-10T07:07:55.079Z - [WATCHER]: tsconfig.json was modified
79
+ [NX Daemon Server] - 2026-09-10T07:07:55.181Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
80
+ [NX Daemon Server] - 2026-09-10T07:07:55.181Z - [REQUEST]: tsconfig.json
81
+ [NX Daemon Server] - 2026-09-10T07:07:55.182Z - [REQUEST]:
82
+ [NX Daemon Server] - 2026-09-10T07:07:55.183Z - Time taken for 'hash changed files from watcher' 0.15591600000334438ms
83
+ [NX Daemon Server] - 2026-09-10T07:07:55.187Z - Time taken for 'build-project-configs' 3.2793339999989257ms
84
+ [NX Daemon Server] - 2026-09-10T07:07:55.190Z - [SYNC]: collect registered sync generators
85
+ [NX Daemon Server] - 2026-09-10T07:07:55.190Z - [SYNC]: project graph hash is the same, not collecting task sync generators
86
+ [NX Daemon Server] - 2026-09-10T07:07:55.190Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
87
+ [NX Daemon Server] - 2026-09-10T07:07:55.190Z - Time taken for 'total execution time for createProjectGraph()' 2.122083999995084ms
88
+ [NX Daemon Server] - 2026-09-10T07:07:57.377Z - [WATCHER]: Processing file changes in outputs
89
+ [NX Daemon Server] - 2026-09-10T07:07:57.382Z - [WATCHER]: tsconfig.json was modified
90
+ [NX Daemon Server] - 2026-09-10T07:07:57.583Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
91
+ [NX Daemon Server] - 2026-09-10T07:07:57.583Z - [REQUEST]: tsconfig.json
92
+ [NX Daemon Server] - 2026-09-10T07:07:57.583Z - [REQUEST]:
93
+ [NX Daemon Server] - 2026-09-10T07:07:57.584Z - Time taken for 'hash changed files from watcher' 0.17925000000104774ms
94
+ [NX Daemon Server] - 2026-09-10T07:07:57.587Z - Time taken for 'build-project-configs' 2.9307499999995343ms
95
+ [NX Daemon Server] - 2026-09-10T07:07:57.589Z - [SYNC]: collect registered sync generators
96
+ [NX Daemon Server] - 2026-09-10T07:07:57.589Z - [SYNC]: project graph hash is the same, not collecting task sync generators
97
+ [NX Daemon Server] - 2026-09-10T07:07:57.589Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
98
+ [NX Daemon Server] - 2026-09-10T07:07:57.589Z - Time taken for 'total execution time for createProjectGraph()' 1.1716249999954016ms
99
+ [NX Daemon Server] - 2026-09-10T07:13:48.609Z - [WATCHER]: Processing file changes in outputs
100
+ [NX Daemon Server] - 2026-09-10T07:13:48.612Z - [WATCHER]: tsconfig.json was modified
101
+ [NX Daemon Server] - 2026-09-10T07:13:49.014Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
102
+ [NX Daemon Server] - 2026-09-10T07:13:49.014Z - [REQUEST]: tsconfig.json
103
+ [NX Daemon Server] - 2026-09-10T07:13:49.014Z - [REQUEST]:
104
+ [NX Daemon Server] - 2026-09-10T07:13:49.017Z - Time taken for 'hash changed files from watcher' 0.21850000001722947ms
105
+ [NX Daemon Server] - 2026-09-10T07:13:49.020Z - Time taken for 'build-project-configs' 4.080917000013869ms
106
+ [NX Daemon Server] - 2026-09-10T07:13:49.024Z - [SYNC]: collect registered sync generators
107
+ [NX Daemon Server] - 2026-09-10T07:13:49.024Z - [SYNC]: project graph hash is the same, not collecting task sync generators
108
+ [NX Daemon Server] - 2026-09-10T07:13:49.024Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
109
+ [NX Daemon Server] - 2026-09-10T07:13:49.024Z - Time taken for 'total execution time for createProjectGraph()' 1.6456660000258125ms
110
+ [NX Daemon Server] - 2026-09-10T07:13:50.820Z - [WATCHER]: Processing file changes in outputs
111
+ [NX Daemon Server] - 2026-09-10T07:13:50.826Z - [WATCHER]: tsconfig.json was modified
112
+ [NX Daemon Server] - 2026-09-10T07:13:51.627Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
113
+ [NX Daemon Server] - 2026-09-10T07:13:51.627Z - [REQUEST]: tsconfig.json
114
+ [NX Daemon Server] - 2026-09-10T07:13:51.627Z - [REQUEST]:
115
+ [NX Daemon Server] - 2026-09-10T07:13:51.629Z - Time taken for 'hash changed files from watcher' 0.18895900005009025ms
116
+ [NX Daemon Server] - 2026-09-10T07:13:51.631Z - Time taken for 'build-project-configs' 1.9125829999684356ms
117
+ [NX Daemon Server] - 2026-09-10T07:13:51.632Z - [SYNC]: collect registered sync generators
118
+ [NX Daemon Server] - 2026-09-10T07:13:51.632Z - [SYNC]: project graph hash is the same, not collecting task sync generators
119
+ [NX Daemon Server] - 2026-09-10T07:13:51.632Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
120
+ [NX Daemon Server] - 2026-09-10T07:13:51.632Z - Time taken for 'total execution time for createProjectGraph()' 1.2112079999642447ms
121
+ [NX Daemon Server] - 2026-09-10T07:20:12.983Z - [WATCHER]: 31 file(s) created or restored, 0 file(s) modified, 0 file(s) deleted
122
+ [NX Daemon Server] - 2026-09-10T07:20:12.993Z - [WATCHER]: Processing file changes in outputs
123
+ [NX Daemon Server] - 2026-09-10T07:20:13.111Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
124
+ [NX Daemon Server] - 2026-09-10T07:20:13.111Z - [REQUEST]: packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts,shared/testing/page-objects/NavigationPage/web.ts,shared/testing/page-objects/PlaygroundPage/mobile.ts,packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts,shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts,packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts,shared/testing/support/actions/fillCredentials/web.action.ts,packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts,shared/testing/page-objects/PlaygroundPage/web.ts,shared/testing/page-objects/NavigationPage/mobile.ts,packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts,packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts,packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts,packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts,shared/testing/support/steps/verifyPlaygroundState/web.step.ts,packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts,packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts,shared/testing/support/actions/fillCredentials/mobile.action.ts,spectra.config.ts,packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts,packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts,packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts,shared/testing/support/steps/togglePlaygroundStates/web.step.ts,packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts,packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts,packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts,packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts,shared/testing/page-objects/MatchersPage/mobile.ts,shared/testing/page-objects/MatchersPage/web.ts,shared/testing/support/steps/togglePlaygroundStates/mobile.step.ts,packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts
125
+ [NX Daemon Server] - 2026-09-10T07:20:13.112Z - [REQUEST]:
126
+ [NX Daemon Server] - 2026-09-10T07:20:13.120Z - Time taken for 'hash changed files from watcher' 16.316333000082523ms
127
+ [NX Daemon Server] - 2026-09-10T07:20:13.128Z - Time taken for 'build-project-configs' 8.424375000060536ms
128
+ [NX Daemon Server] - 2026-09-10T07:20:13.134Z - [SYNC]: collect registered sync generators
129
+ [NX Daemon Server] - 2026-09-10T07:20:13.134Z - [SYNC]: project graph hash is the same, not collecting task sync generators
130
+ [NX Daemon Server] - 2026-09-10T07:20:13.134Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
131
+ [NX Daemon Server] - 2026-09-10T07:20:13.134Z - Time taken for 'total execution time for createProjectGraph()' 5.674666999955662ms
132
+ [NX Daemon Server] - 2026-09-10T07:40:15.411Z - [WATCHER]: Processing file changes in outputs
133
+ [NX Daemon Server] - 2026-09-10T07:40:15.413Z - [WATCHER]: tsconfig.json was modified
134
+ [NX Daemon Server] - 2026-09-10T07:40:15.615Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
135
+ [NX Daemon Server] - 2026-09-10T07:40:15.615Z - [REQUEST]: tsconfig.json
136
+ [NX Daemon Server] - 2026-09-10T07:40:15.615Z - [REQUEST]:
137
+ [NX Daemon Server] - 2026-09-10T07:40:15.618Z - Time taken for 'hash changed files from watcher' 1.2455830001272261ms
138
+ [NX Daemon Server] - 2026-09-10T07:40:15.622Z - Time taken for 'build-project-configs' 3.6960839999374ms
139
+ [NX Daemon Server] - 2026-09-10T07:40:15.624Z - [SYNC]: collect registered sync generators
140
+ [NX Daemon Server] - 2026-09-10T07:40:15.624Z - [SYNC]: project graph hash is the same, not collecting task sync generators
141
+ [NX Daemon Server] - 2026-09-10T07:40:15.624Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
142
+ [NX Daemon Server] - 2026-09-10T07:40:15.624Z - Time taken for 'total execution time for createProjectGraph()' 0.9602909998502582ms
143
+ [NX Daemon Server] - 2026-09-10T07:40:17.481Z - [WATCHER]: Processing file changes in outputs
144
+ [NX Daemon Server] - 2026-09-10T07:40:17.487Z - [WATCHER]: tsconfig.json was modified
145
+ [NX Daemon Server] - 2026-09-10T07:40:17.888Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph...
146
+ [NX Daemon Server] - 2026-09-10T07:40:17.888Z - [REQUEST]: tsconfig.json
147
+ [NX Daemon Server] - 2026-09-10T07:40:17.888Z - [REQUEST]:
148
+ [NX Daemon Server] - 2026-09-10T07:40:17.890Z - Time taken for 'hash changed files from watcher' 0.16204200009815395ms
149
+ [NX Daemon Server] - 2026-09-10T07:40:17.892Z - Time taken for 'build-project-configs' 1.915290999924764ms
150
+ [NX Daemon Server] - 2026-09-10T07:40:17.894Z - [SYNC]: collect registered sync generators
151
+ [NX Daemon Server] - 2026-09-10T07:40:17.894Z - [SYNC]: project graph hash is the same, not collecting task sync generators
152
+ [NX Daemon Server] - 2026-09-10T07:40:17.894Z - [SYNC]: nx.json hash is the same, not collecting global sync generators
153
+ [NX Daemon Server] - 2026-09-10T07:40:17.894Z - Time taken for 'total execution time for createProjectGraph()' 1.4514999999664724ms
154
+ [NX Daemon Server] - 2026-09-10T07:40:18.404Z - [WATCHER]: Processing file changes in outputs
155
+ [NX Daemon Server] - 2026-09-10T07:40:18.478Z - [WATCHER]: Processing file changes in outputs
156
+ [NX Daemon Server] - 2026-09-10T07:40:18.542Z - [WATCHER]: Processing file changes in outputs
157
+ [NX Daemon Server] - 2026-09-10T07:40:18.605Z - [WATCHER]: Processing file changes in outputs
158
+ [NX Daemon Server] - 2026-09-10T07:40:18.726Z - [WATCHER]: Processing file changes in outputs
159
+ [NX Daemon Server] - 2026-09-10T07:40:18.798Z - [WATCHER]: Processing file changes in outputs
160
+ [NX Daemon Server] - 2026-09-10T07:40:18.867Z - [WATCHER]: Processing file changes in outputs
161
+ [NX Daemon Server] - 2026-09-10T07:40:18.928Z - [WATCHER]: Processing file changes in outputs
162
+ [NX Daemon Server] - 2026-09-10T07:40:19.037Z - [WATCHER]: Processing file changes in outputs
163
+ [NX Daemon Server] - 2026-09-10T07:40:19.108Z - [WATCHER]: Processing file changes in outputs
164
+ [NX Daemon Server] - 2026-09-10T07:40:19.175Z - [WATCHER]: Processing file changes in outputs
165
+ [NX Daemon Server] - 2026-09-10T07:40:19.238Z - [WATCHER]: Processing file changes in outputs
166
+ [NX Daemon Server] - 2026-09-10T10:40:17.603Z - [WATCHER]: Stopping the watcher for /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (sources)
167
+ [NX Daemon Server] - 2026-09-10T10:40:17.609Z - [WATCHER]: Stopping the watcher for /Volumes/Home/Documents/TestSpectra/source/cli/templates/nx (outputs)
168
+ [NX Daemon Server] - 2026-09-10T10:40:17.618Z - Server stopped because: "10800000ms of inactivity"
@@ -2,9 +2,9 @@
2
2
 
3
3
  ## Commands
4
4
  - Run all Web tests: `pnpm spectra run -t web`
5
- - Run specific spec: `pnpm spectra run "specs/Playground/TC-0001-form-controls/web.test.ts" -t web`
5
+ - Run specific spec: `pnpm spectra run "packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts" -t web`
6
6
  - Run Nx monorepo E2E targets: `pnpm nx run-many -t e2e`
7
7
  - Run Mobile tests: `pnpm spectra run --target android` or `pnpm spectra run --target ios`
8
- - Type checking: `pnpm type-check` (or `tsc -b tsconfig.spectra.json`)
8
+ - Type checking: `pnpm type-check` (or `tsc -b`)
9
9
  - Preflight doctor: `pnpm spectra doctor`
10
10
  - List devices: `pnpm spectra devices`
@@ -4,14 +4,16 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
7
+ "spectra": "spectra",
7
8
  "e2e": "nx run-many -t e2e",
8
9
  "e2e:affected": "nx affected -t e2e",
9
- "type-check": "tsc -b tsconfig.spectra.json",
10
- "build": "nx run-many -t build"
10
+ "type-check": "tsc -b",
11
+ "build": "nx run-many -t build",
12
+ "postinstall": "spectra sync-types"
11
13
  },
12
14
  "devDependencies": {
13
- "@testspectra/cli": "^1.0.70",
14
- "@testspectra/matchers": "^1.0.70",
15
+ "@testspectra/cli": "link:../..",
16
+ "@testspectra/matchers": "link:../../../tools/matchers",
15
17
  "@types/node": "^20.14.0",
16
18
  "@wdio/cli": "^9.2.8",
17
19
  "@wdio/local-runner": "^9.2.8",
@@ -23,4 +25,4 @@
23
25
  "typescript": "^5.4.5",
24
26
  "webdriverio": "^9.2.8"
25
27
  }
26
- }
28
+ }
@@ -0,0 +1,3 @@
1
+ it("should handle GET API state on Mobile", async () => {
2
+ await MatchersPage.open("api-fetch");
3
+ });
@@ -0,0 +1,12 @@
1
+ ---
2
+ id: TC-0008-fetch-mocking
3
+ title: Mock and assert GET API requests using browser.intercept
4
+ priority: High
5
+ caseType: Positive
6
+ status: ready-for-automation
7
+ coverage:
8
+ web: automated
9
+ mobile: automated
10
+ ---
11
+
12
+ # Mock and assert GET API requests using browser.intercept
@@ -0,0 +1,27 @@
1
+ it("should mock GET API response using browser.intercept and verify rendered items", async () => {
2
+ // Navigate to API Fetch section
3
+ await MatchersPage.open("api-fetch");
4
+
5
+ // Setup API interception with Fixture data
6
+ const mock = await browser.intercept(
7
+ "/api/posts",
8
+ "GET",
9
+ Fixture.apiData.mockPosts
10
+ );
11
+
12
+ // Trigger fetch button
13
+ await MatchersPage.fetchApiButton.click();
14
+
15
+ // Assert status and mocked elements
16
+ await MatchersPage.fetchStatusBadge.shouldHaveText("200 OK");
17
+ await MatchersPage.fetchedItems.shouldHaveLength(Fixture.apiData.mockPosts.length);
18
+ await MatchersPage.fetchedItems.first().shouldContainText(Fixture.apiData.mockPosts[0].title);
19
+
20
+ // Dynamically update fixture response
21
+ await mock.respondWith([
22
+ { id: 99, title: "Dynamic Updated Mock Title", body: "Updated on the fly" }
23
+ ]);
24
+ await MatchersPage.fetchApiButton.click();
25
+ await MatchersPage.fetchedItems.shouldHaveLength(1);
26
+ await MatchersPage.fetchedItems.first().shouldContainText("Dynamic Updated Mock Title");
27
+ });
@@ -0,0 +1,3 @@
1
+ it("should handle POST API state on Mobile", async () => {
2
+ await MatchersPage.open("api-post");
3
+ });
@@ -0,0 +1,12 @@
1
+ ---
2
+ id: TC-0009-post-mocking
3
+ title: Mock and assert POST API requests using browser.intercept
4
+ priority: High
5
+ caseType: Positive
6
+ status: ready-for-automation
7
+ coverage:
8
+ web: automated
9
+ mobile: automated
10
+ ---
11
+
12
+ # Mock and assert POST API requests using browser.intercept
@@ -0,0 +1,24 @@
1
+ it("should mock POST API submission using browser.intercept and verify created response", async () => {
2
+ // Navigate to API POST section
3
+ await MatchersPage.open("api-post");
4
+
5
+ // Setup POST API interception with status 201
6
+ await browser.intercept(
7
+ "/api/posts",
8
+ "POST",
9
+ Fixture.apiData.mockPostResponse,
10
+ { statusCode: 201 }
11
+ );
12
+
13
+ // Fill in form fields from Fixture
14
+ await MatchersPage.postTitleInput.type(Fixture.apiData.mockNewPost.title);
15
+ await MatchersPage.postBodyInput.type(Fixture.apiData.mockNewPost.body);
16
+
17
+ // Submit POST form
18
+ await MatchersPage.submitPostButton.click();
19
+
20
+ // Assert response elements and status
21
+ await MatchersPage.postStatusBadge.shouldHaveText("201 Created");
22
+ await MatchersPage.postSuccessBanner.shouldBeVisible();
23
+ await MatchersPage.postResponseJson.shouldContainText(Fixture.apiData.mockNewPost.title);
24
+ });
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: suite-api-interception
3
+ name: ApiInterception
4
+ description: REST API network mocking, GET/POST payload interception, and status assertions
5
+ executionOrder: 1.4
6
+ parallel: true
7
+ ---
8
+
9
+ # Suite: ApiInterception
@@ -1,5 +1,19 @@
1
- it("should verify browser page title and navigation links on Web", async () => {
1
+ it("should verify browser page title, URL, diagnostics, and navigation on Web", async () => {
2
2
  await MatchersPage.open();
3
- await browser.shouldContainTitle("TestSpectra");
4
- await NavigationPage.sidebarLinks.should("have.length.greaterThan", 0);
3
+
4
+ // Browser title assertions
5
+ await Spectra.browser.shouldHaveTitle("TestSpectra — Matchers API Reference");
6
+ await Spectra.browser.shouldContainTitle("TestSpectra");
7
+
8
+ // Browser URL assertions
9
+ const currentUrl = await browser.getUrl();
10
+ await Spectra.browser.shouldHaveUrl(currentUrl);
11
+ await Spectra.browser.shouldContainUrl("localhost:5173");
12
+
13
+ // Page lifecycle and console error diagnostics
14
+ await Spectra.browser.shouldBeLoaded();
15
+ await Spectra.browser.shouldHaveNoConsoleErrors();
16
+
17
+ // Navigation sidebar collection verification
18
+ await NavigationPage.sidebarLinks.shouldHaveLengthGreaterThan(0);
5
19
  });
@@ -1,7 +1,17 @@
1
1
  it("should verify text and value matchers on Web", async () => {
2
2
  await MatchersPage.open("text");
3
- await MatchersPage.exactText.should("have.text", Fixture.playgroundData.welcomeText);
4
- await MatchersPage.partialText.should("contain.text", "Welcome");
5
- await MatchersPage.emailInput.should("have.value", Fixture.playgroundData.defaultEmail);
6
- await MatchersPage.tokenInput.should("contain.value", "JWT_");
3
+
4
+ // Text assertions (positive and negative)
5
+ await MatchersPage.exactText.shouldHaveText(Fixture.playgroundData.welcomeText);
6
+ await MatchersPage.exactText.shouldNotHaveText("Unexpected Text");
7
+
8
+ await MatchersPage.partialText.shouldContainText("Welcome");
9
+ await MatchersPage.partialText.shouldNotContainText("Goodbye");
10
+
11
+ // Value assertions (positive and negative)
12
+ await MatchersPage.emailInput.shouldHaveValue(Fixture.playgroundData.defaultEmail);
13
+ await MatchersPage.emailInput.shouldNotHaveValue("wrong.user@testspectra.dev");
14
+
15
+ await MatchersPage.tokenInput.shouldContainValue("JWT_");
16
+ await MatchersPage.tokenInput.shouldNotContainValue("EXPIRED_SESSION");
7
17
  });
@@ -1,6 +1,11 @@
1
1
  it("should verify collection lengths and empty lists on Web", async () => {
2
2
  await MatchersPage.open("length");
3
- await MatchersPage.productCards.should("have.length", 4);
4
- await MatchersPage.productCards.should("have.length.greaterThan", 0);
5
- await MatchersPage.emptyList.should("be.empty");
3
+
4
+ // Receiver assertion methods
5
+ await MatchersPage.productCards.shouldHaveLength(4);
6
+ await MatchersPage.productCards.shouldNotHaveLength(0);
7
+ await MatchersPage.productCards.shouldHaveLengthGreaterThan(0);
8
+ await MatchersPage.productCards.shouldHaveLengthLessThan(10);
9
+ await MatchersPage.emptyList.shouldBeEmpty();
10
+ await MatchersPage.productCards.shouldNotBeEmpty();
6
11
  });
@@ -1,5 +1,11 @@
1
- it("should verify be.visible and exist matchers on Web", async () => {
1
+ it("should verify visibility and DOM existence matchers on Web", async () => {
2
2
  await MatchersPage.open("visibility");
3
- await MatchersPage.visibleElement.should("be.visible");
4
- await MatchersPage.existingElement.should("exist");
3
+
4
+ // Element visibility (positive and negative)
5
+ await MatchersPage.visibleElement.shouldBeVisible();
6
+ await MatchersPage.hiddenElement.shouldNotBeVisible();
7
+
8
+ // DOM existence (positive and negative)
9
+ await MatchersPage.existingElement.shouldExist();
10
+ await Spectra.get("#demo-non-existent-el").shouldNotExist();
5
11
  });
@@ -1,8 +1,29 @@
1
- it("should verify enabled/disabled states and HTML attributes on Web", async () => {
1
+ it("should verify interactivity states, classes, attributes, and CSS styling on Web", async () => {
2
2
  await MatchersPage.open("state");
3
- await MatchersPage.submitButton.should("be.enabled");
4
- await MatchersPage.disabledButton.should("be.disabled");
5
- await MatchersPage.checkbox.should("not.be.checked");
6
- await MatchersPage.activeTab.should("have.class", "is-active");
7
- await MatchersPage.navLink.should("have.attr", "href", Fixture.playgroundData.dashboardHref);
3
+
4
+ // Interactivity & state assertions
5
+ await MatchersPage.submitButton.shouldBeEnabled();
6
+ await MatchersPage.submitButton.shouldBeClickable();
7
+
8
+ await MatchersPage.disabledButton.shouldBeDisabled();
9
+ await MatchersPage.disabledButton.shouldNotBeClickable();
10
+
11
+ // Checked states
12
+ await MatchersPage.checkbox.shouldNotBeChecked();
13
+ await MatchersPage.radio.shouldBeChecked();
14
+
15
+ // Focus states
16
+ await MatchersPage.focusInput.shouldNotBeFocused();
17
+ await MatchersPage.focusInput.click();
18
+ await MatchersPage.focusInput.shouldBeFocused();
19
+
20
+ // Class, Attribute, and CSS assertions
21
+ await MatchersPage.activeTab.shouldHaveClass("is-active");
22
+ await MatchersPage.activeTab.shouldNotHaveClass("is-hidden");
23
+
24
+ await MatchersPage.navLink.shouldHaveAttribute("href", Fixture.playgroundData.dashboardHref);
25
+ await MatchersPage.navLink.shouldNotHaveAttribute("disabled");
26
+
27
+ await MatchersPage.styledElement.shouldHaveCss("color", "rgba(239,68,68,1)");
28
+ await MatchersPage.styledElement.shouldNotHaveCss("color", "rgba(0,0,255,1)");
8
29
  });
@@ -1,6 +1,6 @@
1
1
  it("should verify live playground form inputs and default states (Web)", async () => {
2
2
  await Step.verifyPlaygroundState();
3
- await PlaygroundPage.emailInput.should("have.value", Fixture.playgroundData.defaultEmail);
4
- await PlaygroundPage.tokenInput.should("contain.value", "JWT_");
5
- await PlaygroundPage.exactText.should("have.text", Fixture.playgroundData.welcomeText);
3
+ await PlaygroundPage.emailInput.shouldHaveValue(Fixture.playgroundData.defaultEmail);
4
+ await PlaygroundPage.tokenInput.shouldContainValue("JWT_");
5
+ await PlaygroundPage.exactText.shouldHaveText(Fixture.playgroundData.welcomeText);
6
6
  });
@@ -1,6 +1,6 @@
1
1
  it("should update input values and verify updated state (Web)", async () => {
2
2
  await PlaygroundPage.open();
3
3
  await PlaygroundPage.fillCredentials("qa.expert@testspectra.dev", "JWT_custom_session_token");
4
- await PlaygroundPage.emailInput.should("have.value", "qa.expert@testspectra.dev");
5
- await PlaygroundPage.tokenInput.should("contain.value", "JWT_custom_session_token");
4
+ await PlaygroundPage.emailInput.shouldHaveValue("qa.expert@testspectra.dev");
5
+ await PlaygroundPage.tokenInput.shouldContainValue("JWT_custom_session_token");
6
6
  });