@testspectra/cli 1.1.8-rc.1 → 1.1.8-rc.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.
- package/bin/.testspectra-runner.hash +1 -1
- package/bin/spectra.js +0 -0
- package/bin/{testspectra-runner → testspectra-runner.exe} +0 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/__tests__/run-e2e.test.js +49 -49
- package/dist/commands/init.js +148 -148
- package/dist/commands/test.js +29 -1
- package/dist/index.js +11 -11
- package/dist/linter/__tests__/component-test-imports.test.js +51 -51
- package/dist/linter/__tests__/spec-schema.test.js +167 -167
- package/dist/linter/schemas/spec.schema.d.ts +8 -8
- package/dist/linter/schemas/suite.schema.d.ts +4 -4
- package/dist/reporter/semantic-formatter.js +5 -0
- package/package.json +4 -4
- package/templates/default/CLAUDE.md +16 -16
- package/templates/default/global-hooks/after/mobile.hook.ts +3 -3
- package/templates/default/global-hooks/after/web.hook.ts +3 -3
- package/templates/default/global-hooks/before/mobile.hook.ts +3 -3
- package/templates/default/global-hooks/before/web.hook.ts +3 -3
- package/templates/default/package.json +2 -2
- package/templates/default/page-objects/AuthPage/mobile.ts +5 -5
- package/templates/default/page-objects/AuthPage/web.ts +10 -10
- package/templates/default/page-objects/MatchersPage/mobile.ts +70 -70
- package/templates/default/page-objects/MatchersPage/web.ts +43 -43
- package/templates/default/page-objects/NavigationPage/mobile.ts +14 -14
- package/templates/default/page-objects/NavigationPage/web.ts +8 -8
- package/templates/default/page-objects/PlaygroundPage/mobile.ts +42 -42
- package/templates/default/page-objects/PlaygroundPage/web.ts +31 -31
- package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +53 -53
- package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +19 -19
- package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +31 -31
- package/templates/default/specs/ApiInterception/TC-0009-post-mocking/android.test.ts +3 -3
- package/templates/default/specs/ApiInterception/TC-0009-post-mocking/common.test.ts +3 -3
- package/templates/default/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +27 -27
- package/templates/default/specs/ApiInterception/TC-0009-post-mocking/spec.md +19 -19
- package/templates/default/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +26 -26
- package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/common.test.ts +30 -30
- package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/spec.md +22 -22
- package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/common.test.ts +27 -27
- package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/spec.md +20 -20
- package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/spec.md +24 -24
- package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/web.test.ts +26 -26
- package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/spec.md +37 -37
- package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/web.test.ts +21 -21
- package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/spec.md +29 -29
- package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/web.test.ts +16 -16
- package/templates/default/specs/ApiInterception/suite.md +10 -10
- package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/common.test.ts +30 -30
- package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/spec.md +23 -23
- package/templates/default/specs/ApiSeeding/hooks/after/common.hook.ts +16 -16
- package/templates/default/specs/ApiSeeding/hooks/before/common.hook.ts +28 -28
- package/templates/default/specs/ApiSeeding/suite.md +9 -9
- package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/mobile.test.ts +7 -7
- package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/spec.md +19 -19
- package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/web.test.ts +9 -9
- package/templates/default/specs/Authentication/suite.md +9 -9
- package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +9 -9
- package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +17 -17
- package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +19 -19
- package/templates/default/specs/BrowserContext/TC-0022-history-navigation/mobile.test.ts +17 -17
- package/templates/default/specs/BrowserContext/TC-0022-history-navigation/spec.md +28 -28
- package/templates/default/specs/BrowserContext/TC-0022-history-navigation/web.test.ts +26 -26
- package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/common.test.ts +26 -26
- package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/spec.md +19 -19
- package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +11 -11
- package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +17 -17
- package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +11 -11
- package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/common.test.ts +14 -14
- package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/spec.md +21 -21
- package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/mobile.test.ts +28 -28
- package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/spec.md +29 -29
- package/templates/default/specs/DeepLink/suite.md +9 -9
- package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +11 -11
- package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +17 -17
- package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +11 -11
- package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +29 -29
- package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +19 -19
- package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +29 -29
- package/templates/default/specs/ElementMatchers/suite.md +10 -10
- package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -5
- package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -16
- package/templates/default/specs/EnvironmentConfig/suite.md +9 -9
- package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/mobile.test.ts +26 -26
- package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/spec.md +22 -22
- package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/mobile.test.ts +13 -13
- package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/spec.md +20 -20
- package/templates/default/specs/PermissionRationale/suite.md +9 -9
- package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +6 -6
- package/templates/default/specs/Playground/TC-0001-form-controls/spec.md +18 -18
- package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +6 -6
- package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +6 -6
- package/templates/default/specs/Playground/TC-0002-toggle-elements/spec.md +18 -18
- package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -6
- package/templates/default/spectra.config.ts +52 -52
- package/templates/default/support/actions/fillCredentials/mobile.action.ts +4 -4
- package/templates/default/support/actions/fillCredentials/web.action.ts +4 -4
- package/templates/default/support/actions/seedSession/mobile.action.ts +9 -9
- package/templates/default/support/actions/seedSession/web.action.ts +13 -13
- package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +5 -5
- package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +5 -5
- package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +6 -6
- package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +6 -6
- package/templates/nx/.nx/workspace-data/{70094CFD-E89B-57A1-9619-2FC5F4963C54.db-shm → 59842386-c7c4-44ca-b2c2-20e1700bd13d.db-shm} +0 -0
- package/templates/nx/.nx/workspace-data/{70094CFD-E89B-57A1-9619-2FC5F4963C54.db-wal → 59842386-c7c4-44ca-b2c2-20e1700bd13d.db-wal} +0 -0
- package/templates/nx/.nx/workspace-data/d/daemon.log +1577 -5388
- package/templates/nx/.nx/workspace-data/d/server-process.json +1 -1
- package/templates/nx/.nx/workspace-data/file-map.json +116 -116
- package/templates/nx/.nx/workspace-data/lockfile.hash +1 -1
- package/templates/nx/.nx/workspace-data/nx_files.nxt +0 -0
- package/templates/nx/.nx/workspace-data/parsed-lock-file.json +535 -535
- package/templates/nx/.nx/workspace-data/project-graph.json +584 -584
- package/templates/nx/CLAUDE.md +10 -10
- package/templates/nx/package.json +2 -2
- package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +27 -27
- package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -27
- package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +24 -24
- package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -24
- package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +3 -3
- package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +19 -19
- package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +3 -3
- package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +17 -17
- package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +3 -3
- package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +11 -11
- package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +3 -3
- package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +11 -11
- package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +3 -3
- package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +29 -29
- package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -5
- package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -16
- package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/suite.md +9 -9
- package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts +3 -3
- package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +6 -6
- package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +3 -3
- package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -6
- package/templates/nx/pnpm-lock.yaml +6663 -6663
- package/templates/nx/pnpm-workspace.yaml +9 -9
- package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +33 -33
- package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +91 -91
- package/templates/nx/shared/testing/page-objects/NavigationPage/mobile.ts +5 -5
- package/templates/nx/shared/testing/page-objects/NavigationPage/web.ts +8 -8
- package/templates/nx/shared/testing/page-objects/PlaygroundPage/mobile.ts +26 -26
- package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +31 -31
- package/templates/nx/shared/testing/project.json +19 -19
- package/templates/nx/shared/testing/support/actions/fillCredentials/mobile.action.ts +4 -4
- package/templates/nx/shared/testing/support/actions/fillCredentials/web.action.ts +4 -4
- package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/mobile.step.ts +3 -3
- package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +5 -5
- package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +4 -4
- package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +6 -6
- package/templates/nx/spectra.config.ts +52 -52
- package/templates/react-component/.cursorrules +17 -17
- package/templates/react-component/.vscode/extensions.json +5 -5
- package/templates/react-component/CLAUDE.md +14 -14
- package/templates/react-component/README.md +69 -69
- package/templates/react-component/fixtures/component-mock.json +12 -12
- package/templates/react-component/global-hooks/after/web.hook.ts +3 -3
- package/templates/react-component/global-hooks/before/web.hook.ts +3 -3
- package/templates/react-component/package.json +27 -27
- package/templates/react-component/page-objects/BadgeComponent/web.ts +23 -23
- package/templates/react-component/page-objects/ButtonComponent/web.ts +23 -23
- package/templates/react-component/page-objects/InputComponent/web.ts +13 -13
- package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/spec.md +18 -18
- package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/web.test.tsx +11 -11
- package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/spec.md +18 -18
- package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/web.test.tsx +10 -10
- package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/spec.md +18 -18
- package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/web.test.tsx +16 -16
- package/templates/react-component/specs/BadgeComponent/suite.md +12 -12
- package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/spec.md +19 -19
- package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/web.test.tsx +28 -28
- package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/spec.md +19 -19
- package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/web.test.tsx +22 -22
- package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/spec.md +18 -18
- package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/web.test.tsx +8 -8
- package/templates/react-component/specs/ButtonComponent/suite.md +12 -12
- package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/spec.md +20 -20
- package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/web.test.tsx +28 -28
- package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/spec.md +18 -18
- package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/web.test.tsx +9 -9
- package/templates/react-component/specs/InputComponent/suite.md +12 -12
- package/templates/react-component/spectra.config.ts +27 -27
- package/templates/react-component/src/components/Badge/Badge.tsx +60 -60
- package/templates/react-component/src/components/Button/Button.tsx +57 -57
- package/templates/react-component/src/components/Input/Input.tsx +41 -41
- package/templates/react-component/src/test-utils.tsx +23 -23
- package/templates/react-component/support/actions/fillInputField/web.action.ts +9 -9
- package/templates/react-component/support/steps/verifyButtonState/web.step.ts +12 -12
- /package/templates/nx/.nx/workspace-data/{70094CFD-E89B-57A1-9619-2FC5F4963C54.db → 59842386-c7c4-44ca-b2c2-20e1700bd13d.db} +0 -0
package/templates/nx/CLAUDE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# CLAUDE.md - TestSpectra Framework Conventions
|
|
2
|
-
|
|
3
|
-
## Commands
|
|
4
|
-
- Run all Web tests: `pnpm spectra run -t web`
|
|
5
|
-
- Run specific spec: `pnpm spectra run "packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts" -t web`
|
|
6
|
-
- Run Nx monorepo E2E targets: `pnpm nx run-many -t e2e`
|
|
7
|
-
- Run Mobile tests: `pnpm spectra run --target android` or `pnpm spectra run --target ios`
|
|
8
|
-
- Type checking: `pnpm type-check` (or `tsc -b`)
|
|
9
|
-
- Preflight doctor: `pnpm spectra doctor`
|
|
10
|
-
- List devices: `pnpm spectra devices`
|
|
1
|
+
# CLAUDE.md - TestSpectra Framework Conventions
|
|
2
|
+
|
|
3
|
+
## Commands
|
|
4
|
+
- Run all Web tests: `pnpm spectra run -t web`
|
|
5
|
+
- Run specific spec: `pnpm spectra run "packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts" -t web`
|
|
6
|
+
- Run Nx monorepo E2E targets: `pnpm nx run-many -t e2e`
|
|
7
|
+
- Run Mobile tests: `pnpm spectra run --target android` or `pnpm spectra run --target ios`
|
|
8
|
+
- Type checking: `pnpm type-check` (or `tsc -b`)
|
|
9
|
+
- Preflight doctor: `pnpm spectra doctor`
|
|
10
|
+
- List devices: `pnpm spectra devices`
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"postinstall": "spectra sync-types"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"@testspectra/cli": "^1.1.8-rc.
|
|
16
|
-
"@testspectra/matchers": "^1.1.8-rc.
|
|
15
|
+
"@testspectra/cli": "^1.1.8-rc.2",
|
|
16
|
+
"@testspectra/matchers": "^1.1.8-rc.2",
|
|
17
17
|
"@types/node": "^20.14.0",
|
|
18
18
|
"@wdio/cli": "^9.2.8",
|
|
19
19
|
"@wdio/local-runner": "^9.2.8",
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
it("Mock and assert GET API requests using browser.intercept", 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 Spectra.intercept(
|
|
7
|
-
"/api/posts",
|
|
8
|
-
"GET",
|
|
9
|
-
Fixture.apiData.mockPosts
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
// Trigger fetch button in mobile demo app
|
|
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
|
-
});
|
|
1
|
+
it("Mock and assert GET API requests using browser.intercept", 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 Spectra.intercept(
|
|
7
|
+
"/api/posts",
|
|
8
|
+
"GET",
|
|
9
|
+
Fixture.apiData.mockPosts
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
// Trigger fetch button in mobile demo app
|
|
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
|
+
});
|
package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
it("Mock and assert GET API requests using browser.intercept", 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 Spectra.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
|
-
});
|
|
1
|
+
it("Mock and assert GET API requests using browser.intercept", 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 Spectra.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
|
+
});
|
package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
it("Mock and assert POST API requests using browser.intercept", async () => {
|
|
2
|
-
// Navigate to API POST section
|
|
3
|
-
await MatchersPage.open("api-post");
|
|
4
|
-
|
|
5
|
-
// Setup POST API interception with status 201
|
|
6
|
-
await Spectra.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
|
-
});
|
|
1
|
+
it("Mock and assert POST API requests using browser.intercept", async () => {
|
|
2
|
+
// Navigate to API POST section
|
|
3
|
+
await MatchersPage.open("api-post");
|
|
4
|
+
|
|
5
|
+
// Setup POST API interception with status 201
|
|
6
|
+
await Spectra.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
|
+
});
|
package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
it("Mock and assert POST API requests using browser.intercept", async () => {
|
|
2
|
-
// Navigate to API POST section
|
|
3
|
-
await MatchersPage.open("api-post");
|
|
4
|
-
|
|
5
|
-
// Setup POST API interception with status 201
|
|
6
|
-
await Spectra.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
|
-
});
|
|
1
|
+
it("Mock and assert POST API requests using browser.intercept", async () => {
|
|
2
|
+
// Navigate to API POST section
|
|
3
|
+
await MatchersPage.open("api-post");
|
|
4
|
+
|
|
5
|
+
// Setup POST API interception with status 201
|
|
6
|
+
await Spectra.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
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify page title and sidebar navigation links", async () => {
|
|
2
|
-
await MatchersPage.open();
|
|
3
|
-
});
|
|
1
|
+
it("Verify page title and sidebar navigation links", async () => {
|
|
2
|
+
await MatchersPage.open();
|
|
3
|
+
});
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
it("Verify page title and sidebar navigation links", async () => {
|
|
2
|
-
await MatchersPage.open();
|
|
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);
|
|
19
|
-
});
|
|
1
|
+
it("Verify page title and sidebar navigation links", async () => {
|
|
2
|
+
await MatchersPage.open();
|
|
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);
|
|
19
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify exact text, substring text, and input values", async () => {
|
|
2
|
-
await MatchersPage.open("text");
|
|
3
|
-
});
|
|
1
|
+
it("Verify exact text, substring text, and input values", async () => {
|
|
2
|
+
await MatchersPage.open("text");
|
|
3
|
+
});
|
package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
it("Verify exact text, substring text, and input values", async () => {
|
|
2
|
-
await MatchersPage.open("text");
|
|
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");
|
|
17
|
-
});
|
|
1
|
+
it("Verify exact text, substring text, and input values", async () => {
|
|
2
|
+
await MatchersPage.open("text");
|
|
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");
|
|
17
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify collection lengths, counts, and empty lists", async () => {
|
|
2
|
-
await MatchersPage.open("length");
|
|
3
|
-
});
|
|
1
|
+
it("Verify collection lengths, counts, and empty lists", async () => {
|
|
2
|
+
await MatchersPage.open("length");
|
|
3
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
it("Verify collection lengths, counts, and empty lists", async () => {
|
|
2
|
-
await MatchersPage.open("length");
|
|
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();
|
|
11
|
-
});
|
|
1
|
+
it("Verify collection lengths, counts, and empty lists", async () => {
|
|
2
|
+
await MatchersPage.open("length");
|
|
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();
|
|
11
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify element visibility and existence matchers", async () => {
|
|
2
|
-
await MatchersPage.open("visibility");
|
|
3
|
-
});
|
|
1
|
+
it("Verify element visibility and existence matchers", async () => {
|
|
2
|
+
await MatchersPage.open("visibility");
|
|
3
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
it("Verify element visibility and existence matchers", async () => {
|
|
2
|
-
await MatchersPage.open("visibility");
|
|
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();
|
|
11
|
-
});
|
|
1
|
+
it("Verify element visibility and existence matchers", async () => {
|
|
2
|
+
await MatchersPage.open("visibility");
|
|
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();
|
|
11
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify button state, checkbox, radio and attributes", async () => {
|
|
2
|
-
await MatchersPage.open("state");
|
|
3
|
-
});
|
|
1
|
+
it("Verify button state, checkbox, radio and attributes", async () => {
|
|
2
|
+
await MatchersPage.open("state");
|
|
3
|
+
});
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
it("Verify button state, checkbox, radio and attributes", async () => {
|
|
2
|
-
await MatchersPage.open("state");
|
|
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)");
|
|
29
|
-
});
|
|
1
|
+
it("Verify button state, checkbox, radio and attributes", async () => {
|
|
2
|
+
await MatchersPage.open("state");
|
|
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)");
|
|
29
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
it("Verify a custom environmentVariables entry is readable via Spectra.env", async () => {
|
|
2
|
-
if (Spectra.env.DEMO_API_MODE !== "sandbox") {
|
|
3
|
-
throw new Error(`Expected Spectra.env.DEMO_API_MODE to be "sandbox", got "${Spectra.env.DEMO_API_MODE}"`);
|
|
4
|
-
}
|
|
5
|
-
});
|
|
1
|
+
it("Verify a custom environmentVariables entry is readable via Spectra.env", async () => {
|
|
2
|
+
if (Spectra.env.DEMO_API_MODE !== "sandbox") {
|
|
3
|
+
throw new Error(`Expected Spectra.env.DEMO_API_MODE to be "sandbox", got "${Spectra.env.DEMO_API_MODE}"`);
|
|
4
|
+
}
|
|
5
|
+
});
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: TC-0019-read-custom-environment-variable
|
|
3
|
-
title: Verify a custom environmentVariables entry is readable via Spectra.env
|
|
4
|
-
priority: Medium
|
|
5
|
-
caseType: Positive
|
|
6
|
-
status: ready-for-automation
|
|
7
|
-
coverage:
|
|
8
|
-
web: automated
|
|
9
|
-
mobile: automated
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Verify a custom environmentVariables entry is readable via Spectra.env
|
|
13
|
-
|
|
14
|
-
## Test Steps
|
|
15
|
-
1. Read the DEMO_API_MODE variable via the typed Spectra.env
|
|
16
|
-
2. Assert it matches the value configured in spectra.config.ts's executionConfig.environmentVariables
|
|
1
|
+
---
|
|
2
|
+
id: TC-0019-read-custom-environment-variable
|
|
3
|
+
title: Verify a custom environmentVariables entry is readable via Spectra.env
|
|
4
|
+
priority: Medium
|
|
5
|
+
caseType: Positive
|
|
6
|
+
status: ready-for-automation
|
|
7
|
+
coverage:
|
|
8
|
+
web: automated
|
|
9
|
+
mobile: automated
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Verify a custom environmentVariables entry is readable via Spectra.env
|
|
13
|
+
|
|
14
|
+
## Test Steps
|
|
15
|
+
1. Read the DEMO_API_MODE variable via the typed Spectra.env
|
|
16
|
+
2. Assert it matches the value configured in spectra.config.ts's executionConfig.environmentVariables
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: suite-environment-config
|
|
3
|
-
name: EnvironmentConfig
|
|
4
|
-
description: Reading custom executionConfig.environmentVariables values via Spectra.env
|
|
5
|
-
executionOrder: 2.3
|
|
6
|
-
parallel: true
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Suite: EnvironmentConfig
|
|
1
|
+
---
|
|
2
|
+
id: suite-environment-config
|
|
3
|
+
name: EnvironmentConfig
|
|
4
|
+
description: Reading custom executionConfig.environmentVariables values via Spectra.env
|
|
5
|
+
executionOrder: 2.3
|
|
6
|
+
parallel: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Suite: EnvironmentConfig
|
package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify playground form inputs and default states", async () => {
|
|
2
|
-
await Step.verifyPlaygroundState();
|
|
3
|
-
});
|
|
1
|
+
it("Verify playground form inputs and default states", async () => {
|
|
2
|
+
await Step.verifyPlaygroundState();
|
|
3
|
+
});
|
package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
it("Verify playground form inputs and default states", async () => {
|
|
2
|
-
await Step.verifyPlaygroundState();
|
|
3
|
-
await PlaygroundPage.emailInput.shouldHaveValue(Fixture.playgroundData.defaultEmail);
|
|
4
|
-
await PlaygroundPage.tokenInput.shouldContainValue("JWT_");
|
|
5
|
-
await PlaygroundPage.exactText.shouldHaveText(Fixture.playgroundData.welcomeText);
|
|
6
|
-
});
|
|
1
|
+
it("Verify playground form inputs and default states", async () => {
|
|
2
|
+
await Step.verifyPlaygroundState();
|
|
3
|
+
await PlaygroundPage.emailInput.shouldHaveValue(Fixture.playgroundData.defaultEmail);
|
|
4
|
+
await PlaygroundPage.tokenInput.shouldContainValue("JWT_");
|
|
5
|
+
await PlaygroundPage.exactText.shouldHaveText(Fixture.playgroundData.welcomeText);
|
|
6
|
+
});
|
package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
it("Verify typing credentials and updating playground inputs", async () => {
|
|
2
|
-
await PlaygroundPage.open();
|
|
3
|
-
});
|
|
1
|
+
it("Verify typing credentials and updating playground inputs", async () => {
|
|
2
|
+
await PlaygroundPage.open();
|
|
3
|
+
});
|
package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
it("Verify typing credentials and updating playground inputs", async () => {
|
|
2
|
-
await PlaygroundPage.open();
|
|
3
|
-
await PlaygroundPage.fillCredentials("qa.expert@testspectra.dev", "JWT_custom_session_token");
|
|
4
|
-
await PlaygroundPage.emailInput.shouldHaveValue("qa.expert@testspectra.dev");
|
|
5
|
-
await PlaygroundPage.tokenInput.shouldContainValue("JWT_custom_session_token");
|
|
6
|
-
});
|
|
1
|
+
it("Verify typing credentials and updating playground inputs", async () => {
|
|
2
|
+
await PlaygroundPage.open();
|
|
3
|
+
await PlaygroundPage.fillCredentials("qa.expert@testspectra.dev", "JWT_custom_session_token");
|
|
4
|
+
await PlaygroundPage.emailInput.shouldHaveValue("qa.expert@testspectra.dev");
|
|
5
|
+
await PlaygroundPage.tokenInput.shouldContainValue("JWT_custom_session_token");
|
|
6
|
+
});
|