我要检查两个近似相等的矩阵。
开玩笑来说,我们有toEqual
检查两个对象的两个相等性,但是无法比较其近似相等的浮点数属性;我们也有toBeCloseTo
,但是它只能比较两个浮点数,而不能将近似相等策略应用于对象中的所有浮点数属性。
我不想手动比较每个浮点数属性,因为这可能会丢失显示两个对象的差异的冗长结果。 (矩阵对象还包含其他非浮点数字字段,例如字符串)
是否存在更好的方法来近似比较两个矩阵?我该怎么办?
答案 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)