View in Telegram
🚀 Тестирование API и эффектов в React: простые шаги для качественного кода Тестирование API-запросов и эффектов, таких как useEffect, — это важная часть разработки, особенно в компонентах, которые взаимодействуют с сервером. Давайте разберём основные подходы и инструменты, которые помогут вам писать надёжные тесты. 🔹 Почему это важно? Компоненты, работающие с API, часто становятся источником ошибок: проблемы с сетью, некорректные данные или неожиданные состояния. Тестирование помогает: - Убедиться, что компоненты правильно обрабатывают запросы. - Обнаруживать и предотвращать ошибки на ранних стадиях. - Сохранять функциональность при изменении кода. 🔹 Тестирование API-запросов 1. Мокирование запросов с MSW MSW позволяет имитировать серверные ответы без изменения кода компонента. Пример настройки MSW:
import { setupServer } from 'msw/node';
import { rest } from 'msw';

const server = setupServer(
  rest.get('/api/data', (req, res, ctx) => {
    return res(ctx.json({ message: 'Success' }));
  })
);

beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());
Тестирование компонента:
import { render, screen, waitFor } from '@testing-library/react';
import App from './App';

test('показывает данные после успешного запроса', async () => {
  render(<App />);
  
  expect(screen.getByText(/загрузка/i)).toBeInTheDocument();
  
  await waitFor(() => {
    expect(screen.getByText(/success/i)).toBeInTheDocument();
  });
});
2. Использование jest.fn() для мокирования функций Если компонент вызывает функцию, переданную через пропсы, можно замокировать её с помощью jest.fn().
const mockFetchData = jest.fn(() => Promise.resolve({ message: 'Success' }));

test('вызывает fetchData при рендере', async () => {
  render(<App fetchData={mockFetchData} />);
  expect(mockFetchData).toHaveBeenCalledTimes(1);
});
🔹 Тестирование эффектов useEffect часто используется для выполнения API-запросов, и важно убедиться, что компонент правильно реагирует на изменения. 1. Проверка побочных эффектов
import { render, screen } from '@testing-library/react';
import App from './App';

test('выполняет побочный эффект при монтировании', () => {
  render(<App />);
  
  expect(screen.getByText(/загрузка/i)).toBeInTheDocument();
});
2. Тестирование отмены эффектов Если эффект включает очистку (например, отмену запросов), это тоже можно протестировать.
test('отменяет запрос при размонтировании', () => {
  const mockFetchData = jest.fn(() => Promise.resolve());
  const { unmount } = render(<App fetchData={mockFetchData} />);
  
  unmount();
  expect(mockFetchData).toHaveBeenCalledTimes(1);
});
🔹 Рекомендации 1. Мокируйте API-запросы вместо использования реального сервера. Это делает тесты быстрыми и надёжными. 2. Проверяйте поведение компонентов, а не их внутреннюю реализацию. 3. Тестируйте как успешные, так и ошибочные запросы. 4. Используйте cleanup для удаления ненужных эффектов. 🎯 Заключение Тестирование API и эффектов — это основа стабильного приложения. MSW, Jest и React Testing Library — ваши главные помощники для проверки всех сценариев, от загрузки данных до обработки ошибок. Пишите тесты, и ваш код скажет вам спасибо! 😊 ReactJs Daily | #testing
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily