Atomico — это современная библиотека для создания веб-компонентов на JavaScript с декларативным подходом. В контексте E2E (end-to-end) тестирования важно проверять работу компонентов не только на уровне их API или внутренних состояний, но и во взаимодействии с браузером, пользовательским интерфейсом и другими компонентами.
Для E2E тестирования обычно используют инструменты вроде Playwright или Cypress, которые позволяют запускать браузерные сценарии и имитировать действия пользователя. В проекте на Atomico необходимо:
npm install --save-dev playwright
package.json:"scripts": {
"test:e2e": "playwright test"
}
tests/e2e, чтобы отделить их от юнит-тестов.Типичный E2E тест состоит из следующих шагов:
Пример теста с использованием Playwright:
import { test, expect } from '@playwright/test';
test('кнопка Atomico обновляет счетчик', async ({ page }) => {
await page.goto('http://localhost:3000/test-page');
const button = page.locator('my-counter button');
const display = page.locator('my-counter .value');
await expect(display).toHaveText('0');
await button.click();
await expect(display).toHaveText('1');
await button.click();
await expect(display).toHaveText('2');
});
Atomico активно использует shadow DOM, поэтому при
поиске элементов в E2E тестах следует учитывать, что стандартные
селекторы типа document.querySelector могут не находить
вложенные элементы. Playwright и Cypress поддерживают shadow DOM:
const shadowButton = page.locator('my-component').shadowRoot().locator('button');
await shadowButton.click();
Поддержка shadow DOM обеспечивает правильное тестирование визуальных и интерактивных частей компонентов Atomico, что критично для сложных UI.
Компоненты Atomico часто взаимодействуют с API или другими сервисами. Для E2E тестов важно изолировать внешние вызовы, чтобы тесты были стабильными и воспроизводимыми:
page.route('https://api.example.com/data', route => {
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ value: 42 }),
});
});
Это позволяет проверять поведение компонента при предсказуемых данных и симулировать ошибки сервера.
Atomico компоненты могут обновлять DOM асинхронно, поэтому в тестах необходимо использовать явные ожидания:
await expect(display).toHaveText('1', { timeout: 2000 });
Playwright и Cypress предоставляют встроенные методы ожидания, что минимизирует ошибки, связанные с race conditions.
E2E тесты для Atomico компонентов легко интегрировать в поток CI/CD:
Пример конфигурации GitHub Actions:
name: E2E Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 20
- run: npm ci
- run: npm run build
- run: npm run test:e2e
Для удобства и масштабируемости следует придерживаться принципов:
Atomico компоненты часто генерируют события через
dispatch или реактивные свойства. В E2E тестах важно
проверять, что события корректно вызываются:
const log = [];
page.on('console', msg => log.push(msg.text()));
await button.click();
expect(log).toContain('clicked');
Такой подход помогает убедиться, что компонент правильно взаимодействует с внешним миром и другими элементами страницы.
При большом наборе компонентов стоит:
Эти меры повышают стабильность тестовой инфраструктуры и сокращают время проверки при каждом коммите.
E2E тестирование в Atomico сочетает проверку визуального интерфейса, асинхронной логики и взаимодействия между компонентами. Важнейшие элементы — корректная работа с shadow DOM, мокирование внешних вызовов, использование явных ожиданий и интеграция в CI/CD. Эти принципы обеспечивают надежность компонентов и позволяют поддерживать высокое качество веб-приложений.