Базовое тестирование

Тестирование в React Native помогает убедиться, что код работает так, как ожидается, и предотвращает появление регрессий при внесении изменений. На начальном этапе обучения достаточно понимать разницу между тестированием логики и тестированием интерфейса.

Типы тестов

  • Unit-тесты (модульные) — проверяют отдельные функции или модули без зависимости от UI.
  • Интеграционные тесты — проверяют взаимодействие нескольких частей приложения.
  • E2E-тесты (end-to-end) — имитируют действия пользователя в готовом приложении.

Jest — фреймворк для unit-тестов

Jest встроен в React Native по умолчанию. Он позволяет писать тесты для чистых функций, утилит, хуков (с ограничениями) и бизнес-логики.

Пример unit-теста:

// utils/formatPrice.ts
export const formatPrice = (price: number): string => {
  return `${price.toFixed(2)} ₽`;
};

// __tests__/formatPrice.test.ts
import { formatPrice } from '../utils/formatPrice';

test('formats price correctly', () => {
  expect(formatPrice(10)).toBe('10.00 ₽');
  expect(formatPrice(9.99)).toBe('9.99 ₽');
});

Запуск тестов:

npm test
# или
npx jest

Тестирование UI: React Native Testing Library и Detox

  • React Native Testing Library (RNTL) — библиотека для тестирования компонентов в изолированной среде. Позволяет рендерить компонент и проверять наличие текста, кнопок, состояние после взаимодействия.
  • Detox — фреймворк для E2E-тестов. Запускает реальное приложение на эмуляторе и выполняет сценарии (например, «нажать кнопку → проверить экран»).

Однако на начальном этапе не рекомендуется углубляться в UI-тесты. Они сложнее в настройке и поддержке, особенно без опыта.