Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Teste não funciona - o elemento esperado é diferente

Estou tendo um problema ao realizar o teste de um input. Segue abaixo os codigos dos arquivos.

Form.tsx

import { useRef, useState } from 'react'

const Form = () => {
    const [name, setName] = useState('')
    const inputRef = useRef<HTMLInputElement>(null)

    const addParticipant = (event: React.FormEvent<HTMLFormElement>) => {
        event.preventDefault()
        setName('')
        inputRef.current?.focus()
    }

    return (
        <form onSubmit={(event) => addParticipant(event)}>
            <input
                ref={inputRef}
                type='text'
                placeholder='Add participant'
                value={name}
                onChange={(event) => setName(event.target.value)}
            />
            <button disabled={true}>Add</button>
        </form>
    )
}

export default Form

Form.test.tsx

test('Add a participant when name is filled', () => {
    render(<Form />)

    const input = screen.getByPlaceholderText<HTMLInputElement>('Add participant')
    const btn = screen.getByRole('button')

    fireEvent.change(input, { target: { value: 'Ana Catarina' } })
    fireEvent.click(btn)

    expect(input).toHaveFocus()
    expect(input).toHaveValue('')
})

Segue abaixo o erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Tenta mudar no arquivo Form.tsx onSubmit={addParticipant} e button disabled={!name}

import { useRef, useState } from 'react'

const Form = () => { const [name, setName] = useState('') const inputRef = useRef(null)

const addParticipant = (event: React.FormEvent<HTMLFormElement>) => {
    event.preventDefault()
    setName('')
    inputRef.current?.focus()
}

return (
    <form onSubmit={addParticipant}>
        <input
            ref={inputRef}
            type='text'
            placeholder='Add participant'
            value={name}
            onChange={(event) => setName(event.target.value)}
        />
         <button disabled={!name}>Add</button>
    </form>
)

}

export default Form

solução!

Aparentemente o erro está na propriedade disabled do button do Form.

Como o button está com o atributo disabled={true}, o botão não será clicado, e com isso não chamará o método submit fazendo com que a função addParticipant nunca seja executada.

Só alterar o disabled da forma que o Matheus falou que vai resolver.

Ficaria assim:

<button disabled={!name}>Add</button>

Espero ter ajudado! Bons estudos!