Интеграционное тестирование в Preact направлено на проверку взаимодействия между компонентами и их корректного функционирования в составе приложения. В отличие от юнит-тестирования, где проверяется отдельный компонент, интеграционные тесты оценивают, как несколько компонентов работают вместе, включая передачу данных через props, управление состоянием и реакции на события.
Наиболее популярными инструментами для тестирования Preact-приложений являются:
Использование этих инструментов позволяет моделировать пользовательские сценарии, проверять корректность вызова callback-функций и управлять состоянием приложения.
Типичный интеграционный тест в Preact включает следующие шаги:
render из @testing-library/preact для
встраивания компонентов в виртуальный DOM.fireEvent или
userEvent.expect для оценки состояния компонентов, наличия элементов
в DOM и вызова функций.import { h } from 'preact';
import { render, fireEvent } from '@testing-library/preact';
import App from './App';
test('кнопка увеличивает счетчик при клике', () => {
const { getByText } = render(<App />);
const button = getByText('Увеличить');
const counter = getByText('Счетчик: 0');
fireEvent.click(button);
expect(counter.textContent).toBe('Счетчик: 1');
});
В данном примере проверяется взаимодействие между кнопкой и компонентом счетчика: нажатие на кнопку вызывает обновление состояния и изменение текста.
Для компонентов, использующих useEffect или асинхронные
вызовы, необходимо применять waitFor из
@testing-library/preact, чтобы дождаться завершения всех
эффектов:
import { waitFor } from '@testing-library/preact';
test('данные загружаются и отображаются', async () => {
const { getByText } = render(<AsyncDataComponent />);
await waitFor(() => getByText('Данные загружены'));
expect(getByText('Данные загружены')).toBeInTheDocument();
});
Интеграционные тесты Preact часто проверяют корректность передачи props и работу событий:
test('компонент вызывает callback при изменении ввода', () => {
const handleChange = jest.fn();
const { getByPlaceholderText } = render(<InputComponent onCha nge={handleChange} />);
const input = getByPlaceholderText('Введите текст');
fireEvent.input(input, { target: { value: 'Тест' } });
expect(handleChange).toHaveBeenCalledWith('Тест');
});
screen из
@testing-library/preact для более читаемых тестов.userEvent вместо fireEvent
для симуляции действий пользователя, поскольку он учитывает естественные
события браузера.Интеграционное тестирование в Preact позволяет убедиться, что отдельные компоненты приложения работают совместно корректно, взаимодействие через props и контекст происходит без ошибок, а пользовательские сценарии выполняются ожидаемым образом.