当我运行我的测试时,它会给我一个警告,即使测试有效。经过一些研究,似乎我必须把它放在一个act中,但这是一回事第一个test code snippet为什么会发生这种情况?
act
uidvcgyl1#
https://github.com/formium/formik/issues/1543Formik bug。在我的例子中,这发生在运行一个jest测试的时候,它与Formik中的validateOnMount属性有关。我通过在Assert中放入一个waitFor来修复这个问题:
validateOnMount
waitFor
await waitFor(() => expect(getByText('Component header')).toBeInTheDocument() )
请注意,在act中 Package jest渲染不起作用,因为这是重新渲染
w51jfk4q2#
我在使用@testing-library/react-native时遇到了这个错误。
jest.useFakeTimers()
然后在我更改文本后,我调用
act(() => { jest.runAllTimers(); });
例如,
const textInput = getByA11yHint('Enter the text here'); act(() => { fireEvent.changeText(textInput, 'test123'); }); act(() => { jest.runAllTimers(); }); expect(textInput.props.value).toBe('test123');
bvn4nwqk3#
使用expect(...):如果传递给expect的函数返回一个 (例如)HTMLElement,请查找返回Promise<HTMLElement>的替代函数。下面是一个对我很有效的例子:
expect(...)
expect
HTMLElement
Promise<HTMLElement>
import { screen } from "@testing-library/react" test('test name', async () => { /*something else here ...*/ // expect(screen.getByRole( ... )).toBeEnabled() // before expect( await screen.findByRole( ... )).toBeEnabled() // after })
请注意,screen.getByRole会传回HTMLElement,而screen.findByRole会传回Promise。
screen.getByRole
screen.findByRole
Promise
3条答案
按热度按时间uidvcgyl1#
https://github.com/formium/formik/issues/1543
Formik bug。在我的例子中,这发生在运行一个jest测试的时候,它与Formik中的
validateOnMount
属性有关。我通过在Assert中放入一个waitFor
来修复这个问题:请注意,在act中 Package jest渲染不起作用,因为这是重新渲染
w51jfk4q2#
我在使用@testing-library/react-native时遇到了这个错误。
然后在我更改文本后,我调用
例如,
bvn4nwqk3#
使用
expect(...)
:如果传递给expect
的函数返回一个 (例如)HTMLElement
,请查找返回Promise<HTMLElement>
的替代函数。下面是一个对我很有效的例子:
请注意,
screen.getByRole
会传回HTMLElement
,而screen.findByRole
会传回Promise
。