Jest.js 警告:测试中对Formik的更新未 Package 在act(...)中

c8ib6hqw  于 2022-12-08  发布在  Jest
关注(0)|答案(3)|浏览(206)

当我运行我的测试时,它会给我一个警告,即使测试有效。经过一些研究,似乎我必须把它放在一个act中,但这是一回事
第一个
test code snippet
为什么会发生这种情况?

uidvcgyl

uidvcgyl1#

https://github.com/formium/formik/issues/1543
Formik bug。在我的例子中,这发生在运行一个jest测试的时候,它与Formik中的validateOnMount属性有关。我通过在Assert中放入一个waitFor来修复这个问题:

await waitFor(() =>
      expect(getByText('Component header')).toBeInTheDocument()
    )

请注意,在act中 Package jest渲染不起作用,因为这是重新渲染

w51jfk4q

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');
bvn4nwqk

bvn4nwqk3#

使用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

相关问题