fix: resolve Jest syntax error in setup file #867
ci.yml
on: push
Backend Build & Test
37s
Frontend Build & Test
3m 21s
Frontend E2E (Playwright)
10m 58s
Contracts Build & Test
2m 42s
Annotations
12 errors, 4 warnings, and 1 notice
|
Backend Build & Test
Process completed with exit code 1.
|
|
Frontend Build & Test
Process completed with exit code 1.
|
|
[chromium] › e2e/tests/auth.spec.ts:124:7 › protected-route access › denies a role-gated route to an authenticated user without the required role:
frontend/e2e/tests/auth.spec.ts#L129
4) [chromium] › e2e/tests/auth.spec.ts:124:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/access denied/i)
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByText(/access denied/i)
127 | await loginAs(page, '/simulator', user);
128 |
> 129 | await expect(page.getByText(/access denied/i)).toBeVisible();
| ^
130 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).not.toBeVisible();
131 | });
132 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:129:52
|
|
[chromium] › e2e/tests/auth.spec.ts:124:7 › protected-route access › denies a role-gated route to an authenticated user without the required role:
frontend/e2e/tests/auth.spec.ts#L129
4) [chromium] › e2e/tests/auth.spec.ts:124:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
Error: expect(locator).toBeVisible() failed
Locator: getByText(/access denied/i)
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByText(/access denied/i)
127 | await loginAs(page, '/simulator', user);
128 |
> 129 | await expect(page.getByText(/access denied/i)).toBeVisible();
| ^
130 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).not.toBeVisible();
131 | });
132 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:129:52
|
|
[chromium] › e2e/tests/auth.spec.ts:114:7 › protected-route access › grants access to a role-gated route for an authenticated:
frontend/e2e/tests/auth.spec.ts#L119
3) [chromium] › e2e/tests/auth.spec.ts:114:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Network Simulator/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Network Simulator/i })
117 | await loginAs(page, '/simulator', user);
118 |
> 119 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).toBeVisible();
| ^
120 | await expect(page.getByText(/access denied/i)).not.toBeVisible();
121 | await expect(page.getByLabel(/sign out/i)).toBeVisible();
122 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:119:77
|
|
[chromium] › e2e/tests/auth.spec.ts:114:7 › protected-route access › grants access to a role-gated route for an authenticated:
frontend/e2e/tests/auth.spec.ts#L119
3) [chromium] › e2e/tests/auth.spec.ts:114:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Network Simulator/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Network Simulator/i })
117 | await loginAs(page, '/simulator', user);
118 |
> 119 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).toBeVisible();
| ^
120 | await expect(page.getByText(/access denied/i)).not.toBeVisible();
121 | await expect(page.getByLabel(/sign out/i)).toBeVisible();
122 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:119:77
|
|
[chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully:
frontend/e2e/tests/auth.spec.ts#L100
2) [chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: locator.click: Test timeout of 60000ms exceeded.
Call log:
- waiting for getByRole('button', { name: /Albedo/ })
98 |
99 | const connectButton = page.getByRole('button', { name: /Albedo/ });
> 100 | await connectButton.click();
| ^
101 |
102 | // The gate stays up — no crash, no silent false "connected" state — and
103 | // the button recovers to a re-clickable state instead of hanging on
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:100:25
|
|
[chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully:
frontend/e2e/tests/auth.spec.ts#L0
2) [chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Test timeout of 60000ms exceeded.
|
|
[chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully:
frontend/e2e/tests/auth.spec.ts#L100
2) [chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
Error: locator.click: Test timeout of 60000ms exceeded.
Call log:
- waiting for getByRole('button', { name: /Albedo/ })
98 |
99 | const connectButton = page.getByRole('button', { name: /Albedo/ });
> 100 | await connectButton.click();
| ^
101 |
102 | // The gate stays up — no crash, no silent false "connected" state — and
103 | // the button recovers to a re-clickable state instead of hanging on
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:100:25
|
|
[chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully:
frontend/e2e/tests/auth.spec.ts#L0
2) [chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
Test timeout of 60000ms exceeded.
|
|
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate:
frontend/e2e/tests/auth.spec.ts#L79
1) [chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Authentication Required/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Authentication Required/i })
77 |
78 | // Every route but "/" is blocked behind WalletGate until a wallet connects.
> 79 | await expect(page.getByRole('heading', { name: /Authentication Required/i })).toBeVisible();
| ^
80 |
81 | await page.getByRole('button', { name: /Dev Mock Wallet/ }).click();
82 |
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:79:83
|
|
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate:
frontend/e2e/tests/auth.spec.ts#L79
1) [chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Authentication Required/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Authentication Required/i })
77 |
78 | // Every route but "/" is blocked behind WalletGate until a wallet connects.
> 79 | await expect(page.getByRole('heading', { name: /Authentication Required/i })).toBeVisible();
| ^
80 |
81 | await page.getByRole('button', { name: /Dev Mock Wallet/ }).click();
82 |
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:79:83
|
|
Backend Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Contracts Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Frontend Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Frontend E2E (Playwright)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
🎭 Playwright Run Summary
15 failed
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
[chromium] › e2e/tests/auth.spec.ts:96:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
[chromium] › e2e/tests/auth.spec.ts:114:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
[chromium] › e2e/tests/auth.spec.ts:124:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
[chromium] › e2e/tests/auth.spec.ts:135:7 › session recovery and logout › recovers safely when the session has expired: clears storage and returns to login
[chromium] › e2e/tests/auth.spec.ts:153:7 › session recovery and logout › logs out from an authenticated session and clears local state
[chromium] › e2e/tests/navigation.spec.ts:4:7 › critical learning journeys › opens the simulator and playground with mocked realtime transport
[chromium] › e2e/tests/offline.spec.ts:13:7 › offline experience › shows an accessible offline banner when connectivity drops, and clears it when restored
[chromium] › e2e/tests/offline.spec.ts:38:7 › offline experience › does not repeat the offline notice while the connection stays down
[chromium] › e2e/tests/offline.spec.ts:60:7 › offline experience › the offline recovery page stays reachable with no wallet connected, and reflects live connectivity
[chromium] › e2e/tests/responsive.spec.ts:76:9 › mobile-first responsive layout › wallet authentication prompt › connect wallet options render without overflow
[chromium] › e2e/tests/responsive.spec.ts:112:9 › mobile-first responsive layout › learning dashboard with wallet › renders curriculum dashboard without overflow
[chromium] › e2e/tests/responsive.spec.ts:159:9 › mobile-first responsive layout › login page wallet connection › wallet connect card renders without overflow when connected
[chromium] › e2e/tests/wallet.spec.ts:4:7 › wallet onboarding › installs mocked Stellar and Ethereum wallet providers
[chromium] › e2e/tests/wallet.spec.ts:28:7 › wallet onboarding › restores wallet state into the transaction state chart
6 skipped
5 passed (9.0m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
playwright-report
|
13.5 MB |
sha256:b45be09f52fc6dfecd8ea1c3dcaaa22f91161ef1a385676fd9ce29e0cdb99b2f
|
|
|
playwright-test-results
|
16.6 MB |
sha256:4c4b327fb22eb6d12a56210cbcf92f2380de0c93f058db02e4b7517090cf69f5
|
|
|
sbom-frontend
|
152 Bytes |
sha256:fb4e9cf3136eb4702312605b4e18c6fe799e647ff62dec3bdbfcaad317817c08
|
|