SvelteKit предоставляет мощную платформу для разработки приложений на основе Svelte с поддержкой серверного рендеринга и современных фреймворков. Для обеспечения стабильности интерфейса и проверки сценариев пользовательского взаимодействия важно интегрировать E2E (end-to-end) тестирование. Одним из оптимальных инструментов для этого является Playwright — библиотека для автоматизированного управления браузером с возможностью тестирования на разных движках (Chromium, WebKit, Firefox).
Для начала необходимо установить Playwright как зависимость проекта:
npm install -D @playwright/test
После установки можно инициализировать конфигурацию тестов:
npx playwright install
npx playwright test --init
Эти команды создадут структуру тестов и необходимые конфигурационные
файлы (playwright.config.ts), где можно указать браузеры,
параметры запуска и пути к тестам.
Рекомендуемая структура для E2E тестов в проекте SvelteKit:
project-root/
│
├─ src/
│ └─ routes/
│
├─ tests/
│ └─ e2e/
│ ├─ home.spec.ts
│ ├─ login.spec.ts
│ └─ dashboard.spec.ts
│
└─ playwright.config.ts
Каждый файл *.spec.ts содержит набор сценариев для
конкретной страницы или функционала приложения.
import { test, expect } from '@playwright/test';
test('Главная страница отображается корректно', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/SvelteKit App/);
await expect(page.locator('h1')).toHaveText('Добро пожаловать в SvelteKit');
});
Ключевые моменты:
page.goto('/') — переход на главную страницу.expect(page).toHaveTitle() — проверка заголовка
страницы.locator('h1') — выбор элемента для проверки
текста.Playwright позволяет эмулировать действия пользователя, включая ввод текста, клики и выбор элементов:
test('Форма авторизации работает корректно', async ({ page }) => {
await page.goto('/login');
await page.fill('input[name="email"]', 'user@example.com');
await page.fill('input[name="password"]', 'password123');
await page.click('button[type="submit"]');
await expect(page).toHaveURL('/dashboard');
await expect(page.locator('h2')).toHaveText('Панель управления');
});
Особенности:
fill() — заполняет текстовое поле.click() — выполняет клик по элементу.toHaveURL() — проверка изменения адреса после
действия.Для стабильности E2E тестов важно использовать предсказуемые данные.
Playwright позволяет создавать фикстуры с помощью
test.extend():
import { test as base } from '@playwright/test';
export const test = base.extend({
user: async ({}, use) => {
const user = { email: 'user@example.com', password: 'password123' };
await use(user);
},
});
test('Вход с фикстурным пользователем', async ({ page, user }) => {
await page.goto('/login');
await page.fill('input[name="email"]', user.email);
await page.fill('input[name="password"]', user.password);
await page.click('button[type="submit"]');
await expect(page).toHaveURL('/dashboard');
});
Преимущество такого подхода — повторное использование данных без дублирования кода.
Playwright поддерживает параллельное выполнение тестов, что ускоряет проверку больших проектов:
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests/e2e',
workers: 4, // число параллельных воркеров
use: {
headless: true,
viewport: { width: 1280, height: 720 },
actionTimeout: 5000,
ignoreHTTPSErrors: true,
},
});
Настройка воркеров и глобальных параметров позволяет контролировать производительность и стабильность E2E тестов.
Playwright может автоматически создавать скриншоты и записи видео при падении тестов:
use: {
screenshot: 'only-on-failure',
video: 'retain-on-failure',
}
Это помогает быстрее выявлять причины ошибок в интерфейсе и анализировать пользовательские сценарии.
В SvelteKit часто важно гарантировать кросс-браузерную совместимость.
В playwright.config.ts можно указать несколько
проектов:
projects: [
{ name: 'chromium', use: { browserName: 'chromium' } },
{ name: 'firefox', use: { browserName: 'firefox' } },
{ name: 'webkit', use: { browserName: 'webkit' } },
]
Playwright автоматически запустит тесты во всех указанных движках, что снижает риск появления багов на специфических платформах.
SvelteKit активно использует endpoints и server-side actions. Для
проверки таких взаимодействий Playwright можно комбинировать с
page.request:
test('API возвращает список пользователей', async ({ request }) => {
const response = await request.get('/api/users');
expect(response.status()).toBe(200);
const data = await response.json();
expect(data).toHaveLength(10);
});
Это обеспечивает комплексное покрытие как UI, так и backend-логики.
Эта методология обеспечивает надежное, масштабируемое и воспроизводимое E2E тестирование SvelteKit-приложений, сочетая возможности Playwright с особенностями реактивной архитектуры Svelte.