DEV Community

Cover image for React Basics~unit test/user event
Ogasawara Kakeru
Ogasawara Kakeru

Posted on

React Basics~unit test/user event

  • When I test a user event, I use the fireEvent function of the react-testing-library.

・src/Example.js

import Counter from "./components/Counter"; const Example = () => { const originCount = 0; return <Counter originCount={originCount}></Counter>; }; export default Example; 
Enter fullscreen mode Exit fullscreen mode

・src/commponets/Counter.jsx

import { useState } from "react"; const Counter = (props) => { const { originCount } = props; const [count, setCount] = useState(originCount); const countUp = () => { setCount(count + 1); }; return ( <div> <h2>A test of counter</h2> <div> <span>Current count:{count}</span> </div> <div> <button onClick={countUp}>Countup</button> </div> </div> ); }; export default Counter; 
Enter fullscreen mode Exit fullscreen mode

・src/commponets/Counter.test.jsx

import { render, screen, fireEvent } from "@testing-library/react"; import Counter from "./Counter"; test("Whether the current count counts up or not, in case the countUp button is clicked ", () => { const { debug } = render(<Counter originCount={0} />); //test the initial state. const spanElBeforUpdate = screen.getByText("Current count:0"); expect(spanElBeforUpdate).toBeInTheDocument(); //test the user event. In this case, a click event. const btn = screen.getByRole("button", { name: "Countup" }); fireEvent.click(btn); //test the state which is after clicked button. const spanEl = screen.getByText("Current count:1"); expect(spanEl).toBeInTheDocument(); }); 
Enter fullscreen mode Exit fullscreen mode

・Success
Image description

・Failure
Image description

Top comments (1)