【发布时间】:2021-06-20 12:45:36
【问题描述】:
我尝试使用 React 测试库和 Jest 通过测试弹出框的存在来测试必需的输入字段,但我失败了。我尝试了几种变体,但没有一个有效。 UI 的步骤如下:
- 单击空白字段 Empty select field
- 点击字段旁边的(模糊)
- 鼠标悬停在田野上
- 获取所需消息Required message
实现这一点的测试代码是:
const input = screen.getByRole('textbox', {name: /name \*/i})
expect(input).toBeTruthy();
fireEvent.click(input);
fireEvent.blur(input);
await waitFor(() => expect(input).toHaveValue(config.EMPTY_STRING));
act(() => {
fireEvent.mouseOver(input);
});
await waitFor(() => {
expect(screen.getByText('Name is required')).toBeTruthy();
});
不幸的是,它不起作用,我收到此错误:TestingLibraryElementError: Unable to find an element with the text: Name is required。这可能是因为文本被多个元素分解。在这种情况下,您可以为 你的文本匹配器使你的匹配器更灵活。
我以这种方式更改了最后一行:expect(screen.getByText('Name is required')).toBeInTheDocument(); 但得到了同样的错误。
我尝试使用 expect(screen.findByText('Name is required')).toBeInTheDocument();,但得到了同样的错误。
我最后一次尝试是:expect(screen.findByText('Name is required')).toBeTruthy();。在这里,该领域的测试通过了,但整体测试失败了。我得到的错误是:console.error
警告:您似乎有重叠的 act() 调用,这是不支持的。在进行新的调用之前,请务必等待先前的 act() 调用。
错误:未捕获 [TypeError:无法读取 null 的属性“useRealTimers”]
所以我被卡住了。任何帮助将非常感激。非常感谢!
【问题讨论】:
-
fireEvent调用不需要您将它们包装在act中,因为库已经在内部完成了。 -
true 但问题不存在...仍然无法获取工具提示文本..
-
您找到此查询的答案了吗,如果找到解决方案请更新我们
标签: reactjs jestjs react-testing-library