I'm presently learning React-Testing-Library.
I'd like to test mouse interaction with an element. Presently it's a bit unclear to me the difference between userEvent.click(element)
and fireEvent.click(element)
.
Are both recommended for use, and in the example below are they being correctly implemented?
const mockFunction = jest.fn(() => console.info('button clicked'));
const { getByTestId } = render(<MyAwesomeButton onClick={mockFunction} />);
const myAwesomeButton = getByTestId('my-awesome-button');
// Solution A
fireEvent(myAwesomeButton)
expect(mockFunction.toHaveBeenCalledTimes(1);
// Solution B
userEvent.click(myAwesomeButton);
expect(mockFunction).toHaveBeenCalledTimes(1);
Thanks in advance for any clarity.
Behind the scenes, userEvent
uses the fireEvent
. You can consider fireEvent
being the low-level api, while userEvent
sets a flow of actions.
Here is the code for userEvent.click
You can see that depending of which element you are trying to click, userEvent
will do a set of different actions (e.g. if it's a label or a checkbox).