开玩笑toBeCloseTo对象

时间:2020-07-26 23:17:43

标签: javascript jestjs

我要检查两个近似相等的矩阵。

开玩笑来说,我们有toEqual检查两个对象的两个相等性,但是无法比较其近似相等的浮点数属性;我们也有toBeCloseTo,但是它只能比较两个浮点数,而不能将近似相等策略应用于对象中的所有浮点数属性。

我不想手动比较每个浮点数属性,因为这可能会丢失显示两个对象的差异的冗长结果。 (矩阵对象还包含其他非浮点数字字段,例如字符串)

是否存在更好的方法来近似比较两个矩阵?我该怎么办?

1 个答案:

答案 0 :(得分:0)

不幸的是,Jest没有提供这种功能。

我最终得到的解决方法是仅使用toBeCloseTo比较矩阵的所有元素。但是,我的做法是使用一个标志进行测试,如果我们真的需要仔细检查浮点数,则会自动设置该标志,然后该测试将使用toBeCloseTo而不是toEqual。例如:

// closeCheck is a flag indicating if we want to check floating points closely.
if (closeCheck) { // approx equal, default precision: 2
  for (let i = 0; i < matrix.elems.length; i++) {
    expect(matrix.elems[i]).toBeCloseTo(want.elems[i])
  }
// otherwise we just compare using toEqual.
} else expect(matrix).toEqual(want)