fix(test): resolve unhandled rejection in sidebar logout error test
Some checks failed
Admin Web Docker / Admin Web Tests (pull_request) Successful in 33s
CI / Detect Changes (pull_request) Successful in 3s
Admin Web Docker / Docker Build Validation (pull_request) Successful in 36s
Admin Web Docker / Semantic Release (pull_request) Has been skipped
CI / YouTube Worker (pull_request) Failing after 5s
Admin Web Docker / Build & Push Docker Image (pull_request) Has been skipped
CI / Deploy (pull_request) Has been skipped
PR → Build → WiFi/USB Deploy → LGTM / Build & Deploy to iPhone (WiFi/USB) (pull_request) Successful in 5m3s
PR → Build → WiFi/USB Deploy → LGTM / Wait for LGTM comment (pull_request) Failing after 14m53s
Some checks failed
Admin Web Docker / Admin Web Tests (pull_request) Successful in 33s
CI / Detect Changes (pull_request) Successful in 3s
Admin Web Docker / Docker Build Validation (pull_request) Successful in 36s
Admin Web Docker / Semantic Release (pull_request) Has been skipped
CI / YouTube Worker (pull_request) Failing after 5s
Admin Web Docker / Build & Push Docker Image (pull_request) Has been skipped
CI / Deploy (pull_request) Has been skipped
PR → Build → WiFi/USB Deploy → LGTM / Build & Deploy to iPhone (WiFi/USB) (pull_request) Successful in 5m3s
PR → Build → WiFi/USB Deploy → LGTM / Wait for LGTM comment (pull_request) Failing after 14m53s
The 'should handle logout errors gracefully' test mocked supabase.auth.signOut
to reject (throw), which does not match real supabase-js behaviour (signOut
resolves with { error }, never throws). The rejecting mock caused an unhandled
promise rejection in the async handleLogout onClick handler: tolerated locally
(vitest exit 0) but failing in CI (npx vitest run exits 1).
Switch to a realistic resolved-with-error mock and assert the user is still
redirected to /login (true graceful handling). No production code change.
This commit is contained in:
@@ -91,8 +91,10 @@ describe('Sidebar', () => {
|
||||
})
|
||||
|
||||
it('should handle logout errors gracefully', async () => {
|
||||
mockSignOut.mockRejectedValueOnce(new Error('Network error'))
|
||||
|
||||
// Real supabase.auth.signOut() never throws — it resolves with { error }.
|
||||
// Mocking it realistically avoids an unhandled rejection and matches prod behaviour.
|
||||
mockSignOut.mockResolvedValueOnce({ error: new Error('Network error') })
|
||||
|
||||
render(<Sidebar />)
|
||||
|
||||
const logoutButton = screen.getByRole('button', { name: /logout/i })
|
||||
@@ -101,6 +103,9 @@ describe('Sidebar', () => {
|
||||
await waitFor(() => {
|
||||
expect(mockSignOut).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
// Graceful: even when signOut errors, the user is still redirected to login.
|
||||
expect(mockPush).toHaveBeenCalledWith('/login')
|
||||
})
|
||||
|
||||
it('should have correct styling for navigation', () => {
|
||||
|
||||
Reference in New Issue
Block a user