Jest 解析之匹配器(上)

402 阅读2分钟

Jest 匹配器可以用不同的方式去测试值,本文会介绍几个常用的匹配器,详细的匹配器 API 可以去官网

通用匹配器

toBe() 可以用于基础类型值的测试,底层使用的 Object.is,这个方法比 === 更加精确。在判断 NaN 的时候,NaN===NaN 得到的是 false,而 Object.is(NaN,NaN) 得到是 true。此外,在判断 +0 是否等于 -0 的时候,=== 给出的结果是相等,而 Object.is 的结果是不相等。

匹配对象的时候可以使用 toEqual() 方法,这个方法会递归检查对象的每个字段。但是,判断对象是否严格相等的时候需要使用 toStrictEqual() 方法。这个方法会不但会检查对象或数组中存在的 undefined 情况,还会判定对象实例和对应的对象字面量不相等。

test("common matchers test", () => {
  let x = 20;
  let obj1 = { name: "leon" };
  let obj2 = { name: "leon" };
  let obj3 = { name: "leon", age: undefined };

  expect(20).toBe(20);
  expect(obj1).not.toBe(obj2);
  expect(obj1).toEqual(obj2);
  expect(obj1).toEqual(obj3);
  expect(obj1).not.toStrictEqual(obj3);
});

从上面的例子可以看出,toBe() 方法可以得出 obj1 和 obj2 是不相等的,而toEqual() 方法得出 obj1 和 obj2 是相等的,所以一般使用 toBe() 进行基础类型值的匹配,使用 toEqual() 进行对象类型的匹配。toEqual() 方法得出 obj1 和 obj3 是相等的,而 toStrictEqual() 方法得出 obj1 和 obj3 是不相等的,所以当匹配的对象中含有 undefined 的时候需要使用 toStrictEqual() 进行匹配。

布尔值

对应 javascript 的布尔值,jest 也有相应的匹配器 toBeTruthy() 和 toBeFalsy()。javascript 中会转化成 false 的情况有 '',0,NaN,false,null,undefined,0n。

test("false result", () => {
  expect("").toBeFalsy();
  expect(null).toBeFalsy();
  expect(undefined).toBeFalsy();
  expect(NaN).toBeFalsy();
  expect(0).toBeFalsy();
  expect(0n).toBeFalsy();
  expect(false).toBeFalsy();
});

上面的例子可以看出, '',0,NaN,false,null,undefined,0n 都可以使用 toBeFalsy() 方法进行匹配。

小结

本文主要介绍了值相等和布尔值判断两种匹配器,其中 toBe() 可以用作基础类型值的匹配判断, toEqual() 可以用作对象类型值的匹配判断,toBeTruthy() 可以用作条件为真的匹配判断,toBeFalsy() 可以用作条件为假的匹配判断。

参考资料:jestjs.io/docs/using-…