Skip to main content

useReducer

Exemplo básico mostrando como testar o gatilho useReducer. O coisa mais importante é que não estamos a testar redutor diretamente - é uma detalhe de implementação do componente! Ao invés deste estaremos a testar a interface do componente.

O componente que estamos a testar muda algum texto dependendo de um estado de 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

Nós estamos a testar para ver se recebemos a saída correta no nosso JSX baseado no estado redutor:

// 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()
})