fireEvent — это функция, предоставляемая React Testing Library, которая позволяет запускать события для заданного элемента. Это полезно для тестирования, так как вы можете имитировать взаимодействие с пользователем (например, клики, ввод текста, нажатие клавиш) и проверять реакцию вашего компонента.
Основные функции fireEvent:
- Имитация событий: Позволяет имитировать различные события, такие как
click,change,keydown,keyup,submitи другие. - Простая интеграция: Легко интегрируется с другими функциями RTL, такими как
renderиscreen. - Подробные события: Позволяет передавать дополнительные данные о событии, такие как
target.valueдля событий ввода.
Пример использования fireEvent:
import React, { useState } from 'react';
function MyComponent() {
const [value, setValue] = useState('');
return (
<div>
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
data-testid="input"
/>
<button onClick={() => setValue('')}>Clear</button>
<p data-testid="value">{value}</p>
</div>
);
}
export default MyComponent;Пример теста:
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import MyComponent from './MyComponent';
test('updates input value and clears it', () => {
render(<MyComponent />);
const inputElement = screen.getByTestId('input');
const valueElement = screen.getByTestId('value');
const clearButton = screen.getByText('Clear');
// Имитация ввода текста
fireEvent.change(inputElement, { target: { value: 'Hello, World!' } });
expect(valueElement.textContent).toBe('Hello, World!');
// Имитация клика по кнопке
fireEvent.click(clearButton);
expect(valueElement.textContent).toBe('');
});Пояснение:
- Импорт
fireEvent: ИмпортируйтеfireEventиз@testing-library/react. - Поиск элементов: Используйте
screen.getByTestIdили другие методы для поиска элементов, с которыми вы хотите взаимодействовать. - Имитация событий: Используйте
fireEventдля имитации событий. Например,fireEvent.changeдля имитации ввода текста иfireEvent.clickдля имитации клика. - Утверждения: Используйте
expectдля проверки, что компонент реагирует на события правильно.
Имитация нажатия клавиши:
test('handles key press', () => {
render(<MyComponent />);
const inputElement = screen.getByTestId('input');
fireEvent.keyDown(inputElement, { key: 'Enter', code: 'Enter' });
// Дополнительные утверждения для проверки реакции на нажатие клавиши
});Имитация отправки формы:
test('handles form submission', () => {
render(<MyComponent />);
const formElement = screen.getByTestId('form');
fireEvent.submit(formElement);
// Дополнительные утверждения для проверки реакции на отправку формы
});