При написании тестов для компонентов React с помощью Vitest и Testing Library, следует тестировать следующие аспекты:

  1. Рендеринг:

    Убедитесь, что компонент рендерится без ошибок и отображает необходимые элементы. Для этого можно использовать методы React testing library.

    test('renders MyComponent without errors', () => {
      render(<MyComponent />);
      
      expect(screen.getByTestId('my-component')).toBeInTheDocument();
    });
  2. Состояние:

    Проверьте, что состояние компонента изменяется правильно в результате пользовательских действий, таких как нажатие на кнопки или ввод текста.

    test('updates state correctly on button click', () => {
      render(<MyComponent />);
      const button = screen.getByRole('button');
      fireEvent.click(button);
      
      expect(screen.getByTestId('counter-value')).toHaveTextContent('1');
    });
  3. Свойства:

    Убедитесь, что компонент правильно реагирует на свойства, переданные ему из родительского компонента или из внешнего источника данных.

    test('renders component with correct prop values', () => {
      const propValue = 'Test';
      render(<MyComponent prop={propValue} />);
      
      expect(screen.getByTestId('my-component')).toHaveAttribute('prop', propValue);
    });
  4. Взаимодействие:

    Проверьте, что компонент правильно взаимодействует с другими компонентами или сервисами, с которыми он взаимодействует, например, отправляет правильные запросы на сервер. Для этого можно использовать mock-функции для имитации взаимодействия с другими компонентами или сервисами.

    test('calls the correct function on button click', () => {
      render(<MyComponent onClick={mockFunction} />);
      const button = screen.getByRole('button');
      fireEvent.click(button);
      
      expect(mockFunction).toHaveBeenCalled();
    });

    Для тестирования запросов к API можно использовать библиотеку axios-mock-adapter.

    Пример использования

  5. Обработка ошибок:

    Убедитесь, что компонент обрабатывает ошибки правильно и выводит соответствующие сообщения об ошибке.

    test('displays error message correctly', () => {
      const errorMessage = 'Error occurred';
      render(<MyComponent />);
      setErrorCondition(true);
      
      expect(screen.getByTestId('error-message')).toHaveTextContent(errorMessage);
    });

Покрытие кода тестами (Code coverage)

Code coverage - это одна из метрик оценки качества тестирования, представляющая из себя плотность покрытия тестами требований либо исполняемого кода.

Для проверки Code Coverage нужно запустить команду:

yarn coverage