End-to-End (E2E) тестирование представляет собой проверку работы приложения в условиях, максимально приближенных к реальным: от пользовательского интерфейса до серверных взаимодействий. В контексте Hyperapp E2E тесты позволяют убедиться, что все действия пользователя приводят к ожидаемым результатам, включая обновление состояния, рендеринг компонентов и вызовы эффектов.
Hyperapp использует однонаправленный поток данных:
state -> view -> actions -> state. Это упрощает
построение тестов, так как:
Такой подход облегчает написание E2E тестов, поскольку можно контролировать состояние приложения и проверять результаты рендеринга напрямую.
Для тестирования фронтенд-приложений на Hyperapp обычно используются инструменты типа Playwright, Cypress или Selenium. Эти библиотеки позволяют:
Типичный E2E тест в Hyperapp включает три этапа:
Подготовка состояния приложения Инициализация
приложения с тестовым состоянием. В Hyperapp это делается через передачу
state и actions при вызове функции
app():
import { app } from "hyperapp";
import { actions, state, view } from "./app";
const testApp = app({
init: state,
view,
node: document.body,
actions
});Выполнение действий пользователя Используются команды библиотеки тестирования для эмуляции взаимодействий:
import { test, expect } from "@playwright/test";
test('добавление элемента', async ({ page }) => {
await page.goto('http://localhost:3000');
await page.fill('#input-task', 'Новая задача');
await page.click('#add-task-button');
});Проверка результата На этом этапе проверяется, что состояние приложения и DOM соответствуют ожидаемому результату:
await expect(page.locator('#tasks li')).toHaveText(['Новая задача']);Hyperapp использует эффекты для взаимодействия с внешними сервисами. В E2E тестах их можно:
Пример подмены эффекта:
const mockEffect = (dispatch, props) => {
dispatch.someAction({ success: true });
};
const testApp = app({
init: state,
view,
node: document.body,
actions,
effects: { fetchData: mockEffect }
});
id, data-testid), чтобы тесты
были устойчивыми к изменениям верстки.await или встроенные
таймауты библиотек тестирования.waitFor) на появление элементов,
а не фиксированные таймауты.E2E тесты в Hyperapp обеспечивают проверку полного пользовательского пути, включая:
Такой подход позволяет создавать стабильные, воспроизводимые тесты, которые гарантируют корректное поведение приложения в реальных условиях использования.