Testing guidelines for SvelteKit frontend, including Svelte 5 runes testing patterns and manual testing procedures.
This project focuses on manual testing rather than automated test frameworks. The priority is:
bun run checkAlways run before committing:
cd frontend
bun run check
Must pass with 0 errors. If there are errors, fix them before committing.
Check for these common issues:
$state, $derived, $effect have .svelte.ts extension$derived values are exported directly from modules$state primitives are exported (only objects or via getter functions)$lib/stores.svelte (not $lib/stores)Critical paths to test:
/)/room/[code])When testing stores, verify:
// In browser console or component:
import { player, setPlayer, room, addPlayerToRoom } from '$lib/stores.svelte';
// 1. Test state updates
setPlayer('test-id', 'Test Player', true);
console.log(player.name); // Should be 'Test Player'
// 2. Test reactivity
player.name = 'Updated Name';
console.log(player.name); // Should be 'Updated Name'
// 3. Test array operations
addPlayerToRoom({ id: 'p2', name: 'Player 2', isHost: false });
console.log(room.players.length); // Should increase
Issue: Changes not reflecting in UI
player.name = 'new' not player = {name: 'new'}Issue: "Cannot export derived state" error
Issue: "rune_outside_svelte" error
ws://localhost:8080/wsTest in two browser windows:
Expected message types in console:
player_joined - When a player joinsplayer_left - When a player disconnectschat_message - Chat messagesphase_changed - When host advances phaseIssue: "WebSocket connection failed"
VITE_WS_BASE env var is set correctlyIssue: Messages not broadcasting
Console:
// Access stores directly
const stores = await import('/src/lib/stores.svelte');
console.log(stores.player);
console.log(stores.room);
React Debugger:
Check if state is reactive:
<script>
import { player } from '$lib/stores.svelte';
// Add this to see updates
$effect(() => {
console.log('Player changed:', player);
});
</script>
Verify store exports:
// In browser console:
import * as stores from '$lib/stores.svelte';
console.log(Object.keys(stores));
// Should see: player, room, connection, messages, getIsHost, setPlayer, etc.
When reviewing frontend PRs, check:
.svelte.ts or .svelte files