1. @testing-library/react-hooks
Simple and complete React hooks testing utilities that encourage good testing practices.
@testing-library/react-hooks
Package: @testing-library/react-hooks
Created by: testing-library
Last modified: Tue, 18 Oct 2022 19:08:25 GMT
Version: 8.0.1
License: MIT
Downloads: 11,164,905
Repository: https://github.com/testing-library/react-hooks-testing-library

Install

npm install @testing-library/react-hooks
yarn add @testing-library/react-hooks

react-hooks-testing-library

ram

Simple and complete React hooks testing utilities that encourage good testing practices.


Read The Docs

Build Status
codecov
version
downloads
MIT License

All Contributors
PRs Welcome
Code of Conduct
Netlify Status
Discord

Watch on GitHub
Star on GitHub
Tweet

A Note about React 18 Support

As part of the changes for React 18, it has been decided that the renderHook API provided by this
library will instead be included as official additions to both react-testing-library
(PR) and
react-native-testing-library
(PR) with the intention being
to provide a more cohesive and consistent implementation for our users.

Please be patient as we finalise these changes in the respective testing libraries.
In the mean time you can install @testing-library/react@^13.1

Table of Contents

The problem

You're writing an awesome custom hook and you want to test it, but as soon as you call it you see
the following error:

Invariant Violation: Hooks can only be called inside the body of a function component.

You don't really want to write a component solely for testing this hook and have to work out how you
were going to trigger all the various ways the hook can be updated, especially given the
complexities of how you've wired the whole thing together.

The solution

The react-hooks-testing-library allows you to create a simple test harness for React hooks that
handles running them within the body of a function component, as well as providing various useful
utility functions for updating the inputs and retrieving the outputs of your amazing custom hook.
This library aims to provide a testing experience as close as possible to natively using your hook
from within a real component.

Using this library, you do not have to concern yourself with how to construct, render or interact
with the react component in order to test your hook. You can just use the hook directly and assert
the results.

When to use this library

  1. You're writing a library with one or more custom hooks that are not directly tied to a component
  2. You have a complex hook that is difficult to test through component interactions

When not to use this library

  1. Your hook is defined alongside a component and is only used there
  2. Your hook is easy to test by just testing the components using it

Example

useCounter.js

 import { useState, useCallback } from 'react'

function useCounter() {
  const [count, setCount] = useState(0)

  const increment = useCallback(() => setCount((x) => x + 1), [])

  return { count, increment }
}

export default useCounter

useCounter.test.js

 import { renderHook, act } from '@testing-library/react-hooks'
import useCounter from './useCounter'

test('should increment counter', () => {
  const { result } = renderHook(() => useCounter())

  act(() => {
    result.current.increment()
  })

  expect(result.current.count).toBe(1)
})

More advanced usage can be found in the
documentation.

Installation

 npm install --save-dev @testing-library/react-hooks

Peer Dependencies

react-hooks-testing-library does not come bundled with a version of
react to allow you to install the specific version you want
to test against. It also does not come installed with a specific renderer, we currently support
react-test-renderer and
react-dom. You only need to install one of them,
however, if you do have both installed, we will use react-test-renderer as the default. For more
information see the
installation docs. Generally, the
installed versions for react and the selected renderer should have matching versions:

 npm install react@^16.9.0
npm install --save-dev react-test-renderer@^16.9.0

NOTE: The minimum supported version of react, react-test-renderer and react-dom is
^16.9.0.

API

See the API reference.

Contributors

Thanks goes to these wonderful people (emoji key):


Michael Peyper

πŸ’» πŸ“– πŸ€” πŸš‡ 🚧 πŸ’¬ ⚠️

otofu-square

πŸ’»

Patrick P. Henley

πŸ€” πŸ‘€

Matheus Marques

πŸ’»

Dhruv Patel

πŸ› πŸ‘€

Nathaniel Tucker

πŸ› πŸ‘€

Sergei Grishchenko

πŸ’» πŸ“– πŸ€”

Josep M Sobrepere

πŸ“–

Marcel Tinner

πŸ“–

Daniel K.

πŸ› πŸ’»

Vince Malone

πŸ’»

Sebastian Weber

πŸ“

Christian Gill

πŸ“–

JavaScript Joe

βœ… ⚠️

Sarah Dayan

πŸ“¦

Roman Gusev

πŸ“–

Adam Seckel

πŸ’»

keiya sasaki

⚠️

Hu Chen

πŸ’» πŸ“– πŸ’‘

Josh

πŸ“– πŸ’¬ πŸ’» πŸ€” 🚧 ⚠️

Na'aman Hirschfeld

πŸ’»

Braydon Hall

πŸ’»

Jacob M-G Evans

πŸ’» ⚠️

Tiger Abrodi

πŸ’» ⚠️

Amr A.Mohammed

πŸ’» ⚠️

Juhana Jauhiainen

πŸ’»

Jens Meindertsma

πŸ’» ⚠️

Marco Moretti

πŸš‡

Martin V.

πŸ“–

Erozak

πŸ“–

Nick McCurdy

🚧

Arya

πŸ“–

numb86

πŸ“–

Alex Young

🚧

Ben Lambert

πŸ“–

David Cho-Lerat

πŸ“–

Evan Harmon

πŸ“–

Jason Brown

πŸ“–

KahWee Teng

πŸ“–

Leonid Shagabutdinov

πŸ“–

Levi Butcher

πŸ“–

Michele Settepani

πŸ“–

Sam

πŸ“–

Tanay Pratap

πŸ“–

Tom Rees-Herdman

πŸ“–

iqbal125

πŸ“–

cliffzhaobupt

🚧

Jon Koops

πŸ’»

Jonathan Peyper

πŸ‘€ πŸ’»

Sean Baines

πŸ“–

Mikhail Vasin

πŸ“–

Aleksandar Grbic

πŸ“–

Jonathan Holmes

πŸ’»

MichaΓ«l De Boey

🚧

Anton Zinovyev

πŸ› πŸ’»

marianna-exelate

πŸš‡

Matan Borenkraout

🚧

andyrooger

πŸ’»

Bryan Wain

πŸ› πŸ‘€

Robert Snow

⚠️

Chris Chen

⚠️

Masious

πŸ“–

Laishuxin

πŸ“–

This project follows the all-contributors specification.
Contributions of any kind welcome!

Issues

Looking to contribute? Look for the
Good First Issue
label.

πŸ› Bugs

Please file an issue for bugs, missing documentation, or unexpected behavior.

See Bugs

πŸ’‘ Feature Requests

Please file an issue to suggest new features. Vote on feature requests by adding a πŸ‘. This helps
maintainers prioritize what to work on.

See Feature Requests

❓ Questions

For questions related to using the library, you can
raise issue here, or
visit a support community:

LICENSE

MIT

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code