Testing
svelte-realtime provides testing utilities for unit testing your live() functions without a real WebSocket connection.
Setup
import { createTestContext } from 'svelte-realtime/test'; Testing RPC functions
import { describe, it, expect } from 'vitest';
import { createTestContext } from 'svelte-realtime/test';
import { addTodo } from '../src/live/todos.js';
describe('addTodo', () => {
it('creates a todo and publishes', async () => {
const ctx = createTestContext({ user: { id: 'user-1' } });
const result = await addTodo.__handler(ctx, 'Buy milk');
expect(result.text).toBe('Buy milk');
expect(ctx.published).toContainEqual({
topic: 'todos',
event: 'created',
data: expect.objectContaining({ text: 'Buy milk' })
});
});
it('rejects unauthenticated users', async () => {
const ctx = createTestContext({ user: null });
await expect(addTodo.__handler(ctx, 'test'))
.rejects.toThrow('UNAUTHORIZED');
});
}); Testing guards
import { createTestContext } from 'svelte-realtime/test';
// Import the guard
import '../src/live/admin.js'; // registers the guard
const ctx = createTestContext({ user: { role: 'viewer' } });
await expect(deleteUser.__handler(ctx, 'user-1'))
.rejects.toThrow('FORBIDDEN'); createTestContext options
| Option | Default | Description |
|---|---|---|
user | {} | Mock user data (what upgrade() would return) |
platform | mock | Mock platform API with publish, subscribe, etc. |
Was this page helpful?