В тесте есть несколько изменений, которые могут решить эту проблему. Пожалуйста, найдите их в следующем коде как комментарии
// The first is adding async to the callback of your `it` so you don't have to use a timeout
it('Should render username and password error messages when both inputs are blank', async () => {
const { getByTestId, queryByTestId } = render(<Index />)
expect(getByTestId('submit-button').disabled).toBeTruthy()
// The second thing is to wrap your fireEvent call in an act (exported from react-testing library). By doing this, the test will wait for promises to be resolved
await act(async () => {
fireEvent.submit(getByTestId('form'))
})
expect(getByTestId('submit-button').disabled).toBeFalsy()
// Finally, you should be able to just use findyByTestId to locate the elements you need, and given that the promises are resolved, they should be in the document
expect(getByTestId('username-error')).toBeInTheDocument()
expect(getByTestId('password-error')).toBeInTheDocument()
})
Пожалуйста, если эти рекомендации не работают, также скопируйте код для тестируемого компонента