TanStack Router предоставляет мощный инструмент для организации маршрутов в приложениях на JavaScript. При разработке сложных приложений критически важно не только корректно настроить маршрутизацию, но и обеспечить её работоспособность через E2E-тесты. E2E-тестирование проверяет поведение приложения как целостной системы, включая переходы между маршрутами, обработку параметров и взаимодействие с компонентами.
Для полноценного тестирования маршрутов требуется интеграция с фреймворками для E2E-тестирования, такими как Cypress или Playwright. Основная цель — имитировать действия пользователя: клики, ввод данных, переходы по ссылкам и проверки состояния приложения.
Пример базовой настройки с Playwright:
import { test, expect } from '@playwright/test';
test('маршруты приложения', async ({ page }) => {
await page.goto('http://localhost:3000');
});
Важно убедиться, что приложение запущено в тестовом окружении, чтобы маршруты были доступны и возвращали корректные страницы.
Статические маршруты — это маршруты без параметров, которые всегда ведут к конкретным компонентам. Проверка таких маршрутов включает:
Пример теста:
test('Главная страница доступна', async ({ page }) => {
await page.goto('http://localhost:3000/home');
await expect(page.locator('h1')).toHaveText('Главная страница');
});
Динамические маршруты содержат параметры, такие как :id
или :slug. TanStack Router позволяет использовать
параметризованные маршруты, а E2E-тестирование проверяет корректность
подстановки значений и отображения данных.
Пример маршрута: /users/:userId
Тестирование включает:
test('Страница пользователя отображает правильные данные', async ({ page }) => {
await page.goto('http://localhost:3000/users/42');
await expect(page.locator('.user-name')).toHaveText('Пользователь 42');
});
Особое внимание уделяется обработке невалидных или отсутствующих параметров. TanStack Router позволяет настроить fallback-компоненты и редиректы, которые также должны проверяться.
TanStack Router поддерживает вложенные маршруты, что позволяет строить сложные интерфейсы с родительскими и дочерними страницами. В E2E-тестах необходимо убедиться, что:
Пример теста для вложенных маршрутов:
test('Дочерний маршрут отображается внутри родителя', async ({ page }) => {
await page.goto('http://localhost:3000/dashboard/settings');
await expect(page.locator('h2')).toHaveText('Настройки');
await expect(page.locator('nav')).toContainText('Dashboard');
});
Переходы через ссылки, кнопки и программную навигацию должны работать
без ошибок. TanStack Router предоставляет API для программного перехода
через router.navigate. В E2E-тестах проверяется:
<Link> или
<NavLink>.router.navigate.Пример:
test('Переход с главной на страницу профиля', async ({ page }) => {
await page.goto('http://localhost:3000/home');
await page.click('text=Профиль');
await expect(page).toHaveURL('http://localhost:3000/profile');
await expect(page.locator('h1')).toHaveText('Профиль');
});
TanStack Router позволяет настраивать редиректы и страницы ошибок. В E2E-тестах важно проверить:
Пример проверки 404:
test('Несуществующий маршрут ведет на страницу ошибки', async ({ page }) => {
await page.goto('http://localhost:3000/unknown');
await expect(page.locator('h1')).toHaveText('Страница не найдена');
});
E2E-тестирование маршрутов в TanStack Router обеспечивает уверенность, что приложение работает корректно при реальных пользовательских сценариях. Тесты покрывают статические и динамические маршруты, вложенные маршруты, редиректы и обработку ошибок, что делает приложение стабильным и предсказуемым.