React + Jest - 测试中对 LoginForm 的更新未包含在 act(...) 中

React + Jest - An update to LoginForm inside a test was not wrapped in act(...)

这让我抓狂。在尝试用 act 包装所有内容之后,我真的完全不理解这个问题(这已经感觉很老套,但我不得不尝试)。测试通过了,但是控制台上到处都是关于“act”的错误。

这是原始测试代码。

const setup = () =>
    render(
        <Provider store={store}>
            <LoginForm />
        </Provider>
    );

jest.mock('@hooks/auth', () => ({
    useLogin: jest.fn()
}));

describe('Login form', () => {
    it('matches snapshot', () => {
        const asFragment = setup();
        expect(asFragment()).toMatchSnapshot();
    });
});

即使像这样简单的测试也会产生控制台错误“act”。

我敢打赌解决方案很简单,但我很想知道 a) 它是什么以及 b) 为什么它会这样工作

我认为 act 仅用于触发 events/submits 等,因为我之前使用它设法解决了一些控制台错误,但这在上面的示例中不起作用。

非常感谢任何能在这里帮助我的人。这可能很简单,但我把测试留到很晚,这是一个教训。

使其(...)异步并在 fireEvent 和 userEvent 上使用 waitFor。基本上任何触发状态更新的东西