javascript / expert
Snippet
Testen der Fehlerbehandlung in SvelteKit Page-Load-Funktionen
Das Testen von SvelteKit-`load`-Funktionen erfordert die Erstellung synthetischer Server-Event-Objekte (`ServerLoadEvent`) und das Abfangen von Fehlern aus SvelteKits `error()`-Helper. Die Kombination aus `try/catch` und `expect.unreachable()` stellt sicher, dass Autorisierungsfehler die erwarteten HTTP-Statuscodes werfen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { error } from '@sveltejs/kit';import { expect, test, vi } from 'vitest';import { load } from './+page.js';vi.mock('$app/navigation', () => ({goto: vi.fn()}));test('throws HttpError 401 when authentication context is missing', async () => {const mockEvent = {locals: { user: null },params: { id: '123' },fetch: vi.fn()};try {await load(mockEvent);expect.unreachable('Load function should have thrown HttpError');} catch (err) {expect(err.status).toBe(401);expect(err.body.message).toBe('Unauthorized access');}});
svelte
Erklärung
1
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
Mockt interne SvelteKit-Navigationsmodule, um Modulauflösungsfehler im Test zu verhindern.
2
const mockEvent = { locals: { user: null }, params: { id: '123' }, fetch: vi.fn() };
Erstellt eine gemockte Event-Payload, die einen nicht-authentifizierten Anfrage-Kontext simuliert.
3
expect.unreachable('Load function should have thrown HttpError');
Lässt den Test explizit fehlschlagen, falls die Load-Funktion ohne Exception ausgeführt wird.
4
expect(err.status).toBe(401);
Überprüft, ob die gefangene HttpError-Exception dem erwarteten 401-Status entspricht.