如何解决相同的 `queryByText()` 语句第二次失败
为什么第二次调用同一个 queryByText
会得到 null
,即使这些调用之间没有操作或状态变化?
it('should ...',async () => {
...
userEvent.upload(fileInput,file);
await waitFor(() => expect(screen.queryByText('Import')).not.toBeDisabled());
userEvent.click(screen.queryByText('Import')); // <- fails here cause the same as above queryByText returns null
// Type 'null' is not assignable to type 'TargetElement'
...
});
如果我将 screen.debug()
放在 await waitFor
之后,它表示按钮肯定在那里:
解决方法
我没注意到,错误 Type 'null' is not assignable to type 'TargetElement'
实际上来自 typescript 编译器,它不是运行时错误。
userEvent.click()
不期望来自 HTMLElement | null
的 queryByText
类型。所以解决方案就是这样投射:screen.queryByText('Import') as HTMLElement
queryBy*
在这里是错误的查询。它应该只用于为可能存在的元素添加额外的断言或断言文档中不的元素。
应该使用 getBy*
查询来获取您认为存在的元素。
如果找不到元素或您的查询不明确(即有多个元素与查询匹配),它会通过抛出错误来断言这一假设是正确的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。