快速提示:toBeDefined 与否。toBeDefined?这就是问题:处理常见的 Jest 误报。
当您断言子组件的存在时,特别是在 Enzyme 中,很容易想要做这样的事情:
常量渲染=浅(<Component showChildComponent /> ) //这将返回子组件
const childComponent = render.find(ChildComponent) // ✅ 这个断言通过了!
期望(rendered.find(ChildComponent)).toBeDefinded()
ChildComponent 存在,并且测试按您认为的方式通过。
但是,如果您现在编写反向断言以确保 ChildComponent 也可以被隐藏,这将有所帮助。
你可能会得到你刚刚写的最自然的逆:
常量渲染=浅(<Component showChildComponent={false} /> ) //这返回null
const childComponent = render.find(ChildComponent) // ❌ 这个断言失败。
期望(rendered.find(ChildComponent)).not.toBeDefinded() // ❌ 这也失败了。
期望(rendered.find(ChildComponent)).toBeUnDefinded()
不幸的是,您过去可能在这种情况下浪费了大量时间。或者可能 ** 你现在,** 这就是你阅读这篇文章的原因。
如果您仔细查看刚刚调用的方法名称,这些失败就会开始变得更有意义。
名字 被定义为
试图告诉我们。虽然它的名字听起来很笼统,但它的用途相对狭窄。
它试图告诉你:
“我只关心事物与价值的关系
不明确的
”。
我们可以用伪代码写出我们的断言来说明幕后发生的测试:
//tobe未定义
如果(空===未定义){返回真} //被定义为
如果(空!==未定义){返回真} //not.toBeDefined...简化
如果(空===未定义){返回真}
顺便说一句,你会发现自己经常遇到这种情况:
它('空',()=> { 常量 n = 空; 期望(n).toBeNull(); 期望(n).toBeDefined(); 期望(n).not.toBeUndefined(); 期望(n).not.toBeTruthy(); 期望(n).toBeFalsy(); });
这些都通过了。
真正的可怕
好的,所以你犯了一个简单的错误并使用了错误的方法。
您因失败的测试而沮丧了几分钟(或几小时) 知道 应该通过。
但是,这里最可怕的是您编写的第一个测试。
以出色的成绩通过的那一个:
const ChildComponent = () => <span>Child</span>
const 组件 = (props) => (
<div>
{props.showChildComponent && (
<ChildComponent />
)}
</div>
) 常量渲染=浅(<Component showChildComponent /> ) // ✅ 像我们认为的那样通过。
期望(rendered.find(ChildComponent)).toBeDefinded()
写完之后,你会想:好的,太好了,现在我们有了测试覆盖率。如果我们弄乱了我们的组件显示和隐藏 ChildComponent 的能力,这个测试将捕获它。正确的?
让我们来测试一下。
假设我们不小心修改了父组件:
常量组件 = () => (
<div>
{props.showComponent === 'showMe' && (
<ChildComponent />
)}
</div>
)
现在 显示组件
道具必须相等 给我看看
显示。
让我们再次运行测试:
常量渲染=浅(<Component showComponent /> ) // ✅ 这仍然通过。
期望(rendered.find(ChildComponent)).toBeDefinded()
A twist ending.
不! 我们一开始就非常小心地编写这些测试!
现在你还记得以前的学习者:
render.find(ChildComponent) = null //true
因此:
render.find(ChildComponent) !== undefined //true
//或者
null !== 未定义 //true
这意味着您的断言是正确的,并且您的测试通过了,尽管您的组件现在被破坏了。这是令人不寒而栗的东西!
擦掉脸上的冷汗,然后查看测试套件。
您可能会对实际有多少误报感到惊讶。
The Sky is, indeed, possibly falling.
额外提示 1 — toBeInTheDocument
我们的误报在 React 测试库中变得不那么真实了,在那里您可以使用专用的断言来测试组件的存在: 进入文档。
但是,使用错误的方法不仅仅是与在树中查找 React 组件相关的问题。您仍然希望将这些基本的 Jest 断言用于诸如 prop 值或测试钩子之类的事情,所以要小心。
**额外提示 2 — 花点时间。
** 当我们匆忙或上下文切换回我们编写测试时,通常会发生此类问题。
被定义为
不如最初听起来那么普遍。然而,它的目的更狭窄,而且完全是关于我们的 JS 价值 不明确的
.
因此,请稍等一下,下次阅读该方法名称。甚至可能是您正在使用的系统的文档!
**额外提示 2 — 替代断言
** 那么,您如何可靠地在 Enzyme 中进行测试呢?
尝试测试长度:
//如果你认为它应该在那里
期望(find(ChildComponent).length).toBe(1) //和 //如果你认为它不应该在那里
期望(find(ChildComponent).length).toBe(0)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/37462/27171803
标签:期望,测试,误报,toBeDefined,Jest,组件,ChildComponent,find From: https://www.cnblogs.com/amboke/p/16704123.html