Для эффективного тестирования React-приложений необходимо корректное
окружение. Основой служат package.json,
конфигурационные файлы Jest и setup-файлы, которые обеспечивают
интеграцию тестового фреймворка с React Testing Library.
Базовый набор для тестирования React-компонентов включает:
npm install --save-dev jest @testing-library/react @testing-library/jest-dom @testing-library/user-event babel-jest
toBeInTheDocument().При использовании TypeScript добавляются типы:
npm install --save-dev @types/jest ts-jest
package.jsonpackage.json хранит информацию о скриптах и
зависимостях. Для тестирования React-приложений важно определить скрипт
для запуска тестов:
{
"scripts": {
"test": "jest --watchAll"
},
"jest": {
"setupFilesAfterEnv": ["<rootDir>/src/setupTests.js"],
"testEnvironment": "jsdom",
"moduleFileExtensions": ["js", "jsx", "ts", "tsx", "json"],
"transform": {
"^.+\\.(js|jsx|ts|tsx)$": "babel-jest"
}
}
}
Ключевые моменты:
setupFilesAfterEnv – массив путей к
файлам, которые будут выполняться до запуска тестов, например
подключение @testing-library/jest-dom.testEnvironment – среда выполнения
тестов. Для React используется jsdom.transform – указание Jest, как
обрабатывать JSX и TypeScript через Babel.jest.config.jsДля более сложных проектов часто удобнее выделить конфигурацию Jest в отдельный файл:
module.exports = {
testEnvironment: 'jsdom',
setupFilesAfterEnv: ['<rootDir>/src/setupTests.js'],
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
transform: {
'^.+\\.(js|jsx|ts|tsx)$': 'babel-jest'
},
moduleNameMapper: {
'\\.(css|less|scss|sass)$': 'identity-obj-proxy'
},
testPathIgnorePatterns: ['/node_modules/', '/build/']
};
Пояснения к важным полям:
moduleNameMapper – позволяет Jest
корректно обрабатывать импорты CSS-модулей.testPathIgnorePatterns – исключает
папки node_modules и build из поиска
тестов.setupFilesAfterEnv – точка подключения
глобальных расширений и кастомных матчеров.Setup-файлы обеспечивают глобальное расширение возможностей
тестирования. Создается файл, например
src/setupTests.js:
import '@testing-library/jest-dom/extend-expect';
Подключение jest-dom добавляет
удобные матчеры:
toBeInTheDocument()toHaveTextContent()toHaveAttribute()Дополнительно в setup-файле можно создавать глобальные моки, например
для fetch или localStorage:
global.fetch = jest.fn(() =>
Promise.resolve({
json: () => Promise.resolve({})
})
);
Рекомендуемая структура тестов в React-проекте:
src/
├─ components/
│ ├─ Button.jsx
│ └─ Button.test.jsx
├─ utils/
│ └─ helpers.test.js
└─ setupTests.js
Если проект использует современный синтаксис JSX или ESModules,
необходим Babel. Пример .babelrc:
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
@babel/preset-env – транспиляция
современного JS.@babel/preset-react – поддержка
JSX.Для TypeScript необходимо добавить:
{
"presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"]
}
jsdom, чтобы симулировать браузерное
окружение.Правильная настройка окружения на старте экономит часы при написании и поддержке тестов, гарантирует совместимость с современным React и позволяет использовать все возможности React Testing Library.