首页 > 解决方案 > expect.anything() 不能与 expect.toBe() 一起使用

问题描述

expect.anything() 不能与 expect.toBe() 一起使用,但可以与 expect.toEqual() 一起使用

test("this will pass", () => {
  expect("red").toEqual(expect.anything());
  expect("red").toBe(expect.anything());
});

两项测试都应通过,但第二项测试失败

标签: javascriptjestjs

解决方案


toBe使用Object.is(见描述)比较值;
expect.anything()返回任何类的对象

因此,在第二种情况下,您将字符串与对象进行比较——这就是它失败的原因。

toEqual实际上调用准备与匹配器对象(如类的实例Anything)一起使用的方法 - 它调用匹配器的asymmetricMatch方法。

由于在第一种情况下asymmetricMatch返回true,第一个测试通过。


推荐阅读