Component Testing в Cypress предназначен для тестирования отдельных компонентов пользовательского интерфейса, обеспечивая возможность изолированной проверки их поведения, рендеринга и взаимодействия с другими компонентами. Такой подход позволяет выявлять ошибки на ранних стадиях разработки и создавать стабильные, надежные интерфейсы.
Для работы с компонентным тестированием необходимо установить Cypress с поддержкой Component Testing. Современные версии Cypress позволяют выполнять тесты компонентов с использованием популярных фреймворков, таких как React, Vue и Angular.
Установка Cypress:
npm install cypress --save-dev
Для Component Testing дополнительно нужно установить пакет с
инструментами для рендеринга компонентов, например
@cypress/react для React:
npm install @cypress/react --save-dev
После установки Cypress можно инициализировать в проекте:
npx cypress open
В интерфейсе откроется меню, где можно выбрать режим Component Testing и настроить его для конкретного фреймворка.
Файл конфигурации Cypress cypress.config.js или
cypress.config.ts требует отдельной секции для component
testing:
const { defineConfig } = require('cypress');
module.exports = defineConfig({
component: {
devServer: {
framework: "react",
bundler: "vite"
},
specPattern: "cypress/component/**/*.cy.{js,jsx,ts,tsx}"
}
});
Ключевые моменты:
framework — указывает используемый UI-фреймворк (React,
Vue, Svelte, Angular).bundler — инструмент сборки (Vite, Webpack). Vite
рекомендуется для высокой скорости перезапуска тестов.specPattern — путь к файлам с тестами компонентов.Эта конфигурация позволяет запускать отдельные компоненты без необходимости поднимать весь проект.
Рекомендуется выделять отдельную папку для component tests. Например:
cypress/
component/
Button.cy.jsx
Modal.cy.jsx
Файл теста обычно содержит:
describe и it.Пример теста для React-компонента кнопки:
import { mount } from '@cypress/react';
import Button from '../. ./src/components/Button';
describe('Button Component', () => {
it('рендерится с текстом', () => {
mount(<Button label="Нажми меня" />);
cy.get('button').should('contain.text', 'Нажми меня');
});
it('вызывает колбек при клике', () => {
const onCl ick = cy.stub();
mount(<Button label="Нажми" onCl ick={onClick} />);
cy.get('button').click().then(() => {
expect(onClick).to.have.been.calledOnce;
});
});
});
Выделение ключевых моментов:
mount — функция, рендерящая компонент внутри тестовой
среды Cypress.cy.get — API для поиска элементов DOM внутри
компонента.Компоненты часто используют стили и сторонние библиотеки UI. Для корректного отображения необходимо подключать CSS и провайдеры:
import { mount } from '@cypress/react';
import { ThemeProvider } from 'styled-components';
import Button from '../. ./src/components/Button';
import theme from '../. ./src/theme';
describe('Button Component с ThemeProvider', () => {
it('рендерится с темой', () => {
mount(
<ThemeProvider theme={theme}>
<Button label="Тест" />
</ThemeProvider>
);
cy.get('button').should('have.css', 'color', theme.colors.primary);
});
});
Подключение провайдеров позволяет тестировать компоненты в окружении, максимально приближенном к реальному приложению.
Для постоянной интеграции удобно запускать component tests через CLI:
npx cypress run-ct
Опции:
--spec "cypress/component/Button.cy.jsx" — запуск
конкретного теста.--browser chrome — выбор браузера для
тестирования.Cypress Component Testing поддерживает:
@cypress/react и
Vite/Webpack.@cypress/vue.@cypress/angular.@cypress/svelte.Каждый фреймворк требует небольших настроек devServer и
дополнительных зависимостей, но концепция mount и работы с
компонентами остаётся одинаковой.
Cypress Component Testing предоставляет визуальный интерфейс для наблюдения за рендерингом компонентов:
Эта функциональность значительно ускоряет отладку и повышает точность тестирования UI.
Настройка Component Testing в Cypress позволяет создавать быстрые, изолированные и стабильные тесты для компонентов UI, обеспечивая уверенность в корректной работе интерфейсов и ускоряя процесс разработки.