Javascript 包括开玩笑时的toBeCloseTo.toMatchObject
我正在测试一个对象是否匹配一组字段,但其中一个字段是浮点,我需要使用。如何在一年内做到这一点 我可以使用Javascript 包括开玩笑时的toBeCloseTo.toMatchObject,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我正在测试一个对象是否匹配一组字段,但其中一个字段是浮点,我需要使用。如何在一年内做到这一点 我可以使用expect(foo.value).toBeCloseTo(5),但我不想将逻辑分解为多个expects,每个浮点数对应一个 状态为“您可以根据值或匹配器匹配属性” 不幸的是,toBeCloseTo目前还不能作为非对称匹配器使用,就像这样 解决方案 如果您使用的是Jest v23或更高版本,您可以使用以下方法创建自己的,基本上是复制的: expect.extend({ toBeAround(
expect(foo.value).toBeCloseTo(5)
,但我不想将逻辑分解为多个expect
s,每个浮点数对应一个
状态为“您可以根据值或匹配器匹配属性”
不幸的是,toBeCloseTo
目前还不能作为非对称匹配器使用,就像这样
解决方案 如果您使用的是Jest v23或更高版本,您可以使用以下方法创建自己的,基本上是复制的:
expect.extend({
toBeAround(实际、预期、精度=2){
const pass=Math.abs(预期-实际)`预期${actual}不在${expected}`附近,
通过:正确
};
}否则{
返回{
消息:()=>`预期${actual}约为${expected}`,
通过:错误
}
}
}
});
常数foo={
酒吧:“baz”,
数值:4.9999
};
测试('foo',()=>{
expect(foo.value).toBeAround(5,3);//开玩笑成功>v20
expect(foo).toMatchObject({
酒吧:“baz”,
value:expect.toBeAround(5,3)//仅在玩笑中成功>v23
});
});
请注意,expect.extend
创建了一个匹配器,该匹配器只能在Jest v23及更高版本的函数中使用,如toMatchObject
替代溶液 来自Jest合作者:“虽然它是隐含的,但目前没有文档记录,Jest断言将不对称匹配器对象评估为” 可以使用以下方式创建非对称匹配器:
const closeTo=(预期精度为2)=>({
不对称匹配:(实际)=>Math.abs(预期-实际){
expect(foo).toMatchObject({
酒吧:“baz”,
值:接近(5,3)//成功
});
});
expect(foo.value).toBeCloseTo(Math.round(foo.value))我猜是这样的。有趣的是,如果false
被传递为所有内置匹配器的Jest v23,那么就可以在toMatchObject
中使用toBeCloseTo
。我可能会提出一个问题,问为什么true
会被传递到那里。谢谢!我已经将这个答案添加到了。关于?的想法?有趣的是,他们的文档显示了以不对称方式使用的示例
expect(foo).toMatchObject({
bar: 'baz',
value: ???.toBeCloseTo(5), // TODO
});