fix: resolve Jest ESM syntax errors in backend tests #868
ci.yml
on: push
Backend Build & Test
2m 13s
Frontend Build & Test
3m 25s
Frontend E2E (Playwright)
11m 10s
Contracts Build & Test
2m 38s
Annotations
13 errors, 4 warnings, and 1 notice
|
Backend Build & Test
Process completed with exit code 1.
|
|
Backend Build & Test
Process completed with exit code 2.
|
|
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, actions/upload-artifact@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.4m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
playwright-report
|
13.4 MB |
sha256:ae07d2dc32fcaa266552b5f987f0337ad3e696445540d1b0f51e26b93b6971fb
|
|
|
playwright-test-results
|
16.5 MB |
sha256:e94bab7087f90c5ac51263460d240b7ae0eff7e4282a89c8a3df34aae41f04bf
|
|
|
sbom-backend
|
193 KB |
sha256:9d3feff1c80947a394bf58c7fd7f6046a5568e2bd762b406314034af6d8e2b55
|
|
|
sbom-frontend
|
152 Bytes |
sha256:8f8787ee1774908c33eb7d3c6a5fcd3ae693f29f77dcf13ba1ad6eaa6acfc86b
|
|