Ответ
Принципы тестирования, которые я применяю:
-
Изолированность тестов - каждый тест должен быть независимым и не влиять на другие. Использую
beforeEach,afterEachдля подготовки/очистки. -
Тестирование поведения, а не реализации - фокус на том, что делает компонент, а не как он устроен внутри.
-
Пирамида тестов - больше юнит-тестов, меньше интеграционных, ещё меньше E2E.
-
Читаемость тестов - применяю паттерн AAA (Arrange-Act-Assert):
test('should increment counter', () => {
// Arrange
const { getByText } = render(<Counter />);
// Act
fireEvent.click(getByText('Increment'));
// Assert
expect(getByText('Count: 1')).toBeInTheDocument();
});
-
Тестирование граничных случаев - пустые данные, ошибки API, крайние значения.
-
Моки и стабы - для изоляции тестируемого модуля от зависимостей.
-
Тестирование доступности - проверка, что компонент работает с screen readers.