我为一个选项写了一个测试,然后我得到了这个警告。在我的测试中,我在等待行为的结束。为什么我得到这个错误?
警告:您似乎有重叠的act()调用,这是不支持的。请确保等待以前的act()调用,然后再进行新的调用。
test('Selection should be have the correct number of options', async () => {
const leftClick = { button: 0 };
const { options } = makeSUT();
const selection = screen.getByLabelText('MultiSelection');
// open all option
act(() => {
userEvent.click(selection, leftClick);
});
// await wait();
options.forEach(async (option, index) => {
if (index === 0) {
expect((await screen.findAllByText(option.label)).length).toEqual(1);
} else {
expect((await screen.findAllByText(option.label)).length).toEqual(1);
}
});
});
谢谢
2条答案
按热度按时间axzmvihb1#
userEvent
实用程序API方法不应 Package 在act()
中。建议不要在此处 Package 。相反,您可以只 Package 方法调用。执行操作后,可以使用waitFor等待组件状态更新并运行Assert。要简化逻辑,我会用waitFor
和getBy
替换findBy,这样你就不必用async
替换你的forEach()
。应确保正确设置
userEvent
(请参见here)以下操作应该可以解决您的问题:
8zzbczxx2#
你不应该把
userEvent.click
Package 在act
中,你只需要把点击的效果 Package 在waitFor
中就可以了。我做了一些小的改动,这样我们就有了一个可读性很强的测试:
getByText
返回与文本匹配的一个元素,因此您不需要获取所有元素并检查是否只有一个元素。forEach
中使用index
参数,所以我们也可以删除它。