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

OptionDefaultDescription
user{}Mock user data (what upgrade() would return)
platformmockMock platform API with publish, subscribe, etc.

Was this page helpful?