Для организации E2E тестирования с компонентами Ant Design в JavaScript рекомендуется использовать Cypress или Playwright. Оба инструмента позволяют полноценно тестировать взаимодействие пользователя с интерфейсом, включая клики, ввод текста, выбор опций и визуальное соответствие компонентов.
Пример установки Cypress:
npm install cypress --save-dev
Для интеграции с Ant Design важно учитывать, что многие компоненты используют асинхронные анимации и динамическое отображение элементов. Поэтому в настройках Cypress следует включить timeouts и использовать команды ожидания элементов:
cy.get('.ant-modal').should('be.visible');
cy.get('.ant-btn-primary').click();
Компоненты формы в Ant Design (Form, Input,
Select, Checkbox, Radio) требуют
особого внимания при E2E тестировании, так как они часто управляются
внутренним состоянием React.
cy.get('input[name="username"]')
.type('admin')
.should('have.value', 'admin');
cy.get('textarea[name="description"]')
.type('Тестовое описание')
.should('contain.value', 'Тестовое описание');
Особенности:
.type() для ввода текста..should('have.value', ...).cy.get('.ant-select').click();
cy.get('.ant-select-item-option')
.contains('Опция 1')
.click();
cy.get('.ant-select-selection-item').should('contain.text', 'Опция 1');
Особенности:
portal), поэтому важно выбирать элементы через их
глобальный селектор..click() и .contains() для выбора нескольких
опций.cy.get('.ant-checkbox-input').check().should('be.checked');
cy.get('.ant-radio-input').check().should('be.checked');
Особенности:
.should('be.checked').Компонент Modal требует контроля за асинхронным
появлением и исчезновением:
cy.get('.ant-modal').should('exist');
cy.get('.ant-modal .ant-btn-primary').click();
cy.get('.ant-modal').should('not.exist');
Ключевые моменты:
.should('exist') и
.should('not.exist') гарантирует, что тест корректно
учитывает анимацию закрытия.Ant Design Table и List часто содержат динамические данные. E2E тесты должны учитывать задержку загрузки данных и виртуализацию строк.
cy.get('.ant-table-row').should('have.length.greaterThan', 0);
cy.get('.ant-table-cell').contains('Иванов').should('exist');
Особенности:
contains() удобно для поиска конкретной
строки по тексту.Компоненты message, notification и
Tooltip в Ant Design имеют встроенные таймауты и анимацию.
Для их тестирования используют cy.wait() или специальные
команды ожидания появления элемента:
cy.get('.ant-message-notice').should('be.visible');
cy.get('.ant-message-notice').contains('Успешно сохранено');
Особенности:
Компоненты навигации и скрываемого контента (Tabs,
Collapse) требуют проверки состояния активного элемента и
отображаемого контента:
cy.get('.ant-tabs-tab').contains('Профиль').click();
cy.get('.ant-tabs-content-holder .ant-tab-pane-active')
.should('contain.text', 'Информация о пользователе');
cy.get('.ant-collapse-header').click();
cy.get('.ant-collapse-content').should('be.visible');
Особенности:
.ant-tab-pane-active определяет активную вкладку.Ant Design активно использует анимации, что может приводить к нестабильности тестов. Для повышения стабильности:
import { ConfigProvider } fr om 'antd';
import 'antd/dist/reset.css';
Использование явных ожиданий:
.should('be.visible').should('exist').wait() только при крайней необходимости.Проверка состояния компонентов вместо DOM-свойств:
.should('have.class', 'ant-checkbox-checked') вместо
сложного поиска input.E2E тесты для Ant Design удобно запускать в CI/CD системах:
npx cypress run --headless --browser chrome
Рекомендации:
Для крупных приложений с Ant Design рекомендуется использовать Page Object Pattern, чтобы тесты оставались читаемыми и поддерживаемыми.
class LoginPage {
visit() {
cy.visit('/login');
}
fillUsername(name) {
cy.get('input[name="username"]').type(name);
}
fillPassword(pass) {
cy.get('input[name="password"]').type(pass);
}
submit() {
cy.get('.ant-btn-primary').click();
}
}
Преимущества: