Тестирование маршрутизации (routing) в React-приложении важно для обеспечения правильного перехода между страницами и отображения соответствующих компонентов. Для тестирования маршрутизации можно использовать библиотеку React Router в сочетании с React Testing Library и Jest.

Основные аспекты тестирования routing:

  1. Проверка правильности рендеринга компонентов: Убедитесь, что при переходе по определенному маршруту рендерится правильный компонент.
  2. Проверка переходов между маршрутами: Убедитесь, что переходы между маршрутами работают правильно.
  3. Проверка параметров маршрута: Убедитесь, что параметры маршрута (например, динамические маршруты) передаются и обрабатываются правильно.

Инструменты для тестирования routing:

  • React Router: Библиотека для маршрутизации в React.
  • React Testing Library: Утилита для тестирования компонентов React.
  • Jest: Фреймворк для тестирования.
  • MemoryRouter: Компонент из React Router, который можно использовать для тестирования маршрутизации в изолированной среде.

Пример файла с маршрутами App.js:

import React from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import Home from "./Home";
import About from "./About";
import User from "./User";
 
const App = () => {
  return (
    <Router>
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route path="/user/:id" component={User} />
      </Switch>
    </Router>
  );
};
 
export default App;

Пример тестового файла App.test.js:

import { render, screen } from "@testing-library/react";
import { MemoryRouter, Route } from "react-router-dom";
import App from "./App";
import Home from "./Home";
import About from "./About";
import User from "./User";
 
// Имитация компонентов Home, About и User
jest.mock("./Home", () => () => <div data-testid="home">Home</div>);
jest.mock("./About", () => () => <div data-testid="about">About</div>);
jest.mock("./User", () => ({ match }) => (
  <div data-testid="user">User {match.params.id}</div>
));
 
test("renders Home component on / route", () => {
  render(
    <MemoryRouter initialEntries={["/"]}>
      <App />
    </MemoryRouter>,
  );
 
  expect(screen.getByTestId("home")).toBeInTheDocument();
});
 
test("renders About component on /about route", () => {
  render(
    <MemoryRouter initialEntries={["/about"]}>
      <App />
    </MemoryRouter>,
  );
 
  expect(screen.getByTestId("about")).toBeInTheDocument();
});
 
test("renders User component on /user/:id route", () => {
  render(
    <MemoryRouter initialEntries={["/user/123"]}>
      <App />
    </MemoryRouter>,
  );
 
  expect(screen.getByTestId("user")).toHaveTextContent("User 123");
});

Назад