SuperAPI AI Directory

svelte-testing

Testing & quality

View repository

Updated 10-16 05:41

About this skill

Svelte Testing

Quick Start

// Client-side component test (.svelte.test.ts)
import { render } from 'vitest-browser-svelte';
import { expect } from 'vitest';
import Button from './button.svelte';

test('button click increments counter', async () => {
	const page = await render(Button);
	const button = page.getByRole('button', { name: /click me/i });

	await button.click();
	await expect.element(button).toHaveTextContent('Clicked: 1');
});

Core Principles

  • Always use locators: page.getBy*() methods, never containers
  • Multiple elements: Use .first(), .nth(), .last() to avoid strict mode violations
  • Use untrack(): When accessing $derived values in tests
  • Real API objects: Test with FormData/Request, minimal mocking

Reference Files

Notes

  • In component tests, test form state without submitting SvelteKit forms; use await expect.element() for locator assertions
  • In Playwright E2E, submit real forms and use await expect(locator)
  • Colocate .svelte.test.ts (client), .test.ts (Node), .ssr.test.ts (optional SSR), and .e2e.ts (Playwright)
  • CLI baseline: client/server projects and assertion enforcement; Playwright matches **/*.e2e.{ts,js}
  • Import page from vitest/browser; await render with renderer v3
  • Importing render registers cleanup without a setup file