useReducer
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Exemple de base montrant comment tester le hook useReducer. Le point crucial est que nous ne testons pas le reducer directement - c'est un détail d'implémentation du composant ! Nous testons plutôt l'interface du composant.
Le composant testé modifie du texte en fonction d'un état isConfirmed.
// example.js
import React, {useReducer} from 'react'
const initialState = {
isConfirmed: false,
}
function reducer(state = initialState, action) {
switch (action.type) {
case 'SUCCESS':
return {
...state,
isConfirmed: true,
}
default:
throw Error('unknown action')
}
}
const Example = () => {
const [state, dispatch] = useReducer(reducer, initialState)
return (
<div>
<div>
{state.isConfirmed ? (
<p>Confirmed!</p>
) : (
<p>Waiting for confirmation...</p>
)}
</div>
<button onClick={() => dispatch({type: 'SUCCESS'})}>Confirm</button>
</div>
)
}
export default Example
Nous vérifions si notre JSX produit le rendu attendu en fonction de l'état du reducer.
// example.test.js
import React from 'react'
import {render, fireEvent} from '@testing-library/react'
import Example from './example.js'
it('shows success message after confirm button is clicked', () => {
const {getByText} = render(<Example />)
expect(getByText(/waiting/i)).toBeInTheDocument()
fireEvent.click(getByText('Confirm'))
expect(getByText('Confirmed!')).toBeInTheDocument()
})