将getBy*与toBeInTheDocument结合使用的原因



有很多getBy*findBy*查询与expect().toBeInTheDocument()一起使用的例子。同时,测试库文档指出,当0个元素匹配时,这两种类型的查询都会抛出错误。

所以有一种情况,当我们执行expect(screen.getByText('some text')).toBeInTheDocument()时,我们检查了两次元素的存在,这是多余的。

大家这么做的原因是什么?

这纯粹是为了可读性。您实际上并不需要断言.toBeInTheDocument()或任何其他断言。正如您所说,在失败的情况下,测试失败的错误实际上是由getBy*方法抛出的-expect甚至从未被调用。

但是,使用expect(actual).matcher(expected)形式可以更清楚地表明您正在断言元素的存在,而单独使用getBy*则不是很明确。读者将期望测试具有一定的"节奏",其中设置了一些先决条件(安排或给定),采取了一些操作(Act或When),并检查了一些后置条件(Assert或Then)。如果一个测试在结束时没有任何expect标记,那可能看起来像一个错误。

您也可以有lint规则(如jest/expect-expect,尽管它可以配置为包括getBy*作为期望)或Jest自己的expect.hasAssertions(),如果您让断言是隐式的,即使在传递的情况下,它也会不高兴。

Testing Library有自己的ESLint规则,其中包括testing-library/prefer-explicit-assert,也涵盖了这种行为;上面写着(强调我的):

此规则旨在鼓励用户显式断言存在元素,而不是仅仅使用getBy*查询并期望它不会抛出错误,因此更容易理解是什么测试中预期的行为.

相关内容

  • 没有找到相关文章

最新更新