Jest toBeCloseTo的精度不按预期工作

时间:2018-06-17 12:38:28

标签: javascript jestjs

我正在尝试在Jest中使用toBeCloseTo来测试浮点数:

expect(value).toBeCloseTo(0.01491, 5);

但是当我进行测试时,我看到了这个结果:

Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355

当我将精度设置为4时,测试通过,但我很困惑。在documentation中,它说:

  

使用numDigits控制小数点后检查的位数

所以,我在这里假设我正在比较正确的位数:我有.01491,其中有5个数字,所以我希望(双关语!)测试比较正是那些数字和传递。

我在这里缺少什么?

谢谢

1 个答案:

答案 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 。舍入到五位小数,收到的值precision0.01491570355

据我所知,比较背后的逻辑是,如果期望值是你实际的四舍五入,那么实际值将被认为接近预期值,在0.01492位数内。值为numDigits小数位。