【发布时间】:2017-12-24 23:43:55
【问题描述】:
Jest 文档内容如下:
toBe 只是检查一个值是否符合您的期望。它使用 === 来检查严格相等。
对于toEqual:
当您想检查两个对象是否具有相同的值时,请使用 .toEqual。这个匹配器递归地检查所有字段的相等性,而不是检查对象的身份——这也被称为“深度相等”。例如,toEqual 和 toBe 在此测试套件中的行为不同,因此所有测试都通过了。
const x = { a: { b: 3 } };
const y = { a: { b: 3 } };
expect(x).toEqual(y);
expect(x).toBe(y);
在这种情况下,toEqual 通过但toBe 失败。我知道toEqual 通过了,因为它进行了深度相等 检查。为什么toBe 在这种情况下会失败?
此外,是否有使用 toBe 和 toEqual 的最佳实践(不仅在 Jest 中,在其他测试框架中也是如此)?
【问题讨论】:
-
仅供参考:关于这两种方法的文档现在很常见: - jestjs.io/docs/en/expect#toequalvalue - jestjs.io/docs/en/expect#tobevalue 两种方法都在内部使用
Object.is。