I Love ReactJS

Using Jest for React Unit Testing

Jest has become one of the most popular testing libraries in the React ecosystem due to its simplicity and powerful features. In this article, we will explore how to use Jest to write effective unit tests for React components.

Setting Up Jest

First, let's install Jest and its required dependencies:

npm install --save-dev jest @testing-library/react @testing-library/jest-dom

Then, update your package.json to include the test script:

{ "scripts": { "test": "jest" } }

Writing Your First Test

Consider a simple React component that displays a greeting:

// Greeting.js import React from 'react'; function Greeting({ name }) { return <h1>Hello, {name}!</h1>; } export default Greeting;

Now, let's write a unit test for this component using Jest:

// Greeting.test.js import React from 'react'; import { render } from '@testing-library/react'; import '@testing-library/jest-dom/extend-expect'; import Greeting from './Greeting'; test('renders greeting text', () => { const { getByText } = render(<Greeting name="World" />); const greetingElement = getByText(/Hello, World!/i); expect(greetingElement).toBeInTheDocument(); });

Testing Props and State

You can also test how the component behaves with different props and state:

// Counter.js import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } export default Counter;
// Counter.test.js import React from 'react'; import { render, fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom/extend-expect'; import Counter from './Counter'; test('renders initial count', () => { const { getByText } = render(<Counter />); const countElement = getByText(/Count: 0/i); expect(countElement).toBeInTheDocument(); }); test('increments count when button is clicked', () => { const { getByText } = render(<Counter />); const button = getByText('Increment'); fireEvent.click(button); const countElement = getByText(/Count: 1/i); expect(countElement).toBeInTheDocument(); });

Mocking Functions

You can use Jest's jest.fn() to mock functions and test their behavior:

// ClickCounter.js import React, { useState } from 'react'; function ClickCounter({ onIncrement }) { const [count, setCount] = useState(0); const handleClick = () => { setCount(count + 1); onIncrement(); }; return ( <div> <p>Count: {count}</p> <button onClick={handleClick}>Increment</button> </div> ); } export default ClickCounter;
// ClickCounter.test.js import React from 'react'; import { render, fireEvent } from '@testing-library/react'; import '@testing-library
Exit mobile version