我正在尝试在Jest中使用toBeCloseTo
来测试浮点数:
expect(value).toBeCloseTo(0.01491, 5);
但是当我进行测试时,我看到了这个结果:
Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355
当我将精度设置为4
时,测试通过,但我很困惑。在documentation中,它说:
使用
numDigits
控制小数点后检查的位数
所以,我在这里假设我正在比较正确的位数:我有.01491
,其中有5
个数字,所以我希望(双关语!)测试比较正是那些数字和传递。
我在这里缺少什么?
谢谢
答案 0 :(得分:7)
actual comparison used by Jest's toBeCloseTo
method是
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false
});
function getRandomInt() {
return Math.floor(Math.random() * Math.pow(10,6));
}
$(document).ready(function(){
$('#edit_in_buy_usd').click(function(){
$.post("edit_id.php?rnd=" +getRandomInt(),
{edit_id: $('#edit_in_buy_usd').val()},
function(data){
$('#id').html(data);
}
);
});
});
(奇怪的是,文档将第三个参数列为 Math.abs(expected - actual) < Math.pow(10, -precision) / 2
,而不是numDigits
。)
因此,您的测试失败,因为预期值和实际值之间的差异超过0.5×10 -5 :它约为0.57×10 -5 。舍入到五位小数,收到的值precision
为0.01491570355
。
据我所知,比较背后的逻辑是,如果期望值是你实际的四舍五入,那么实际值将被认为接近预期值,在0.01492
位数内。值为numDigits
小数位。