fireEvent — это функция, предоставляемая React Testing Library, которая позволяет запускать события для заданного элемента. Это полезно для тестирования, так как вы можете имитировать взаимодействие с пользователем (например, клики, ввод текста, нажатие клавиш) и проверять реакцию вашего компонента.

Основные функции fireEvent:

  1. Имитация событий: Позволяет имитировать различные события, такие как clickchangekeydownkeyupsubmit и другие.
  2. Простая интеграция: Легко интегрируется с другими функциями RTL, такими как render и screen.
  3. Подробные события: Позволяет передавать дополнительные данные о событии, такие как 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('');
});

Пояснение:

  1. Импорт fireEvent: Импортируйте fireEvent из @testing-library/react.
  2. Поиск элементов: Используйте screen.getByTestId или другие методы для поиска элементов, с которыми вы хотите взаимодействовать.
  3. Имитация событий: Используйте fireEvent для имитации событий. Например, fireEvent.change для имитации ввода текста и fireEvent.click для имитации клика.
  4. Утверждения: Используйте 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);
  // Дополнительные утверждения для проверки реакции на отправку формы
});

Назад