[英]How to approximately compare JSON object literals using Chai or vanilla javascript
考虑 JSON object 文字的expected
值和actual
值:
let expectedResult = {
[0.9272952180016122, 1.1760052070951352, 1.0808390005411683],
[1.2870022175865687, 0.8097835725701669, 1.240498971965643],
[1.3494818844471053, 1.014197008784674, 1.3894765523934063]
],
'spectrum': [
[ 5, 13, 17],
[25, 29, 37],
[41, 53, 61]
]
};
let actualResult = {
[0.9272952180016122, 1.1760052070951352, 1.0808390005411683],
[1.2870022175865687, 0.8097835725701669, 1.240498971965643],
[1.3494818844471053, 1.014197008784674, 1.3894765523934063]
],
'spectrum': [
[ 5, 13, 17],
[25, 29, 37],
[41, 53, 61]
]
};
第二个条目不同: 1.1760052070951352
与1.176005207095135
。 在 javascript 或 Chai 中是否有任何构造来处理这种比较?
以下不起作用,因为它最终成为 object 比较
chai.expect(actualResult).to.be.closeTo(expectedResult);
AssertionError: expectedResult { Object (real, imag, ...) } 是一个数字
这个 function 显然是为chai5
的。 https://github.com/chaijs/chai/issues/644 。
计划是在 Chai 5 中具有这种行为。欢迎您现在制作接受 Sinon 匹配器的插件 - 但要注意它可能在 Chai 5 推出时已经过时
在此期间,这是一个解决方法
我最终将@vaskevich 方法实现为插件。 它甚至替换了这个关于调用存根的可能令人困惑的文本。 这里是:
chai.use((_chai, utils) => {
chai.Assertion.addMethod('matchEql', function fn(expectedMatch) {
const subject = utils.flag(this, 'object');
const stub = sinon.stub();
stub(subject);
try {
sinon.assert.calledWithMatch(stub, expectedMatch);
} catch (error) {
error.name = 'MatchAssertionError';
error.message = error.message.replace(
/^expected stub to be called with match/,
`expected ${utils.objDisplay(subject)} to match`
);
throw error;
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.