Navigo — это лёгкий роутер для JavaScript, позволяющий организовать маршрутизацию в одностраничных приложениях (SPA). Модульное тестирование роутов в Navigo позволяет проверить корректность навигации, обработку параметров URL и вызовы соответствующих обработчиков, не запуская весь браузерный контекст.
Тестирование роутов состоит из нескольких ключевых элементов:
root) и
конфигурации:import Navigo from 'navigo';
const router = new Navigo('/', { hash: false });
true, роутер
использует хеш-навигацию (/#/home) вместо стандартного
HTML5 history API.on:router.on({
'/home': () => console.log('Home page'),
'/about': () => console.log('About page'),
'/product/:id': (params) => console.log(`Product ID: ${params.id}`)
});
:id) автоматически передаются в
функцию-обработчик.const homeHandler = jest.fn();
const aboutHandler = jest.fn();
const productHandler = jest.fn();
router.on({
'/home': homeHandler,
'/about': aboutHandler,
'/product/:id': productHandler
});
jest.fn() (или аналогов в других тестовых
фреймворках) позволяет проверять вызовы обработчиков и передаваемые
параметры.navigate:router.navigate('/home');
expect(homeHandler).toHaveBeenCalled();
router.navigate('/product/42');
expect(productHandler).toHaveBeenCalledWith({ id: '42' });
navigate вызывает соответствующий маршрут так же,
как если бы пользователь перешёл по URL.notFound:const notFoundHandler = jest.fn();
router.notFound(notFoundHandler);
router.navigate('/unknown');
expect(notFoundHandler).toHaveBeenCalled();
resolve:router.on('/old', () => router.navigate('/new'));
const newHandler = jest.fn();
router.on('/new', newHandler);
router.navigate('/old');
expect(newHandler).toHaveBeenCalled();
jest.clearAllMocks()).window.location напрямую,
использовать методы роутера.router.on('/admin/*', () => console.log('Admin area'));
this при необходимости).describe('Router Navigo', () => {
let router;
let homeHandler, productHandler, notFoundHandler;
beforeEach(() => {
homeHandler = jest.fn();
productHandler = jest.fn();
notFoundHandler = jest.fn();
router = new Navigo('/');
router.on({
'/home': homeHandler,
'/product/:id': productHandler
});
router.notFound(notFoundHandler);
});
test('should call home handler', () => {
router.navigate('/home');
expect(homeHandler).toHaveBeenCalled();
});
test('should pass params to product handler', () => {
router.navigate('/product/99');
expect(productHandler).toHaveBeenCalledWith({ id: '99' });
});
test('should call notFound handler for unknown route', () => {
router.navigate('/unknown');
expect(notFoundHandler).toHaveBeenCalled();
});
});
Модульное тестирование с Navigo минимизирует ошибки маршрутизации и гарантирует, что логика переходов работает в любых условиях, сохраняя динамику SPA и корректную обработку URL.