Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包括开玩笑时的toBeCloseTo.toMatchObject_Javascript_Unit Testing_Jestjs - Fatal编程技术网

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
});