【问题标题】:Whats the difference between toBeInTheDocument and getBy* in @testing-library/react@testing-library/react 中的 toBeInTheDocument 和 getBy* 有什么区别
【发布时间】:2021-10-20 12:30:06
【问题描述】:

有区别吗

expect(screen.queryByText('<something>')).toBeInTheDocument();

screen.getByText('<something>');

(具体getBy*queryBy*操作不相关)

react-testing-library?

【问题讨论】:

标签: javascript reactjs testing jestjs react-testing-library


【解决方案1】:

getByText 尝试查找节点并在找不到时抛出错误。这将导致测试立即失败。

如果找不到节点,queryByText 会返回null

假设您在渲染的组件中有文本&lt;something&gt;,您可以断言它是否已渲染。

如果确定文本已经渲染,那么你可以简单地使用getByText

expect(screen.getByText('<something>')).toBeInTheDocument();

测试就会通过。

如果对于场景文本没有呈现,那么上面的断言将抛出一个错误并且测试用例失败。

在这种情况下,queryByText 文本最有意义

何时未渲染

expect(screen.getByText('<something>')).not.toBeInTheDocument(); // throws an error

expect(screen.queryByText('<something>')).not.toBeInTheDocument(); // asserts as true

【讨论】:

  • 所以当他们想知道文档中的某个元素是否有相同的结果时,可能queryBy* 更好,因为断言错误比抛出的错误更具可读性
  • 没错。 queryByText 主要用于节点不存在于文档中但仍要断言用例的情况。
  • 所以应该使用queryBy*,因为它会在失败时提供有用的断言消息(尽管你说最常用的用例不是这样)
  • 它不会提供断言消息。但它允许我们在某事不存在时断言某事。
  • 我的意思是toBeInTheDocumentqueryBy* 本身没什么
猜你喜欢
  • 2019-10-26
  • 2020-03-28
  • 1970-01-01
  • 2019-06-06
  • 2021-06-02
  • 2011-08-01
  • 1970-01-01
  • 2022-10-18
相关资源
最近更新 更多