比较Floats(Eq匹配器)的随机RSpec失败

问题描述 投票:3回答:2

我甚至不确定从哪里开始。很抱歉,如果这是重复的,但我甚至不知道要搜索什么或调用此特定问题。

随机地,而不是经常,我的RSpec套件中的测试将失败,我将得到如下错误:

expected: 0.69
     got: 0.69 (0.69e0)

(compared using ==)

RSpec代码比较两个不同模型的两个浮点数,它们在完成规范时应该是相同的值。有没有办法在命令控制台中重现这个?我已经尝试了明显的东西(下面),但老实说我不知所措。如果我重新运行测试十几次,我就无法重现这个问题。

0.69 == 0.69e0 => true
0.69 == 0.69 => true
6.9e-1 == 0.69 => true
ruby rspec matcher
2个回答
4
投票

这是测试浮点数的一般问题。在使用RSpec时,我总是将它们转换为字符串以进行比较:

expect(float.to_s).to eq '0.69'

2
投票

在测试浮点数时,我建议你使用RSpec的be_within matcher

例:

expect(my_float).to be_within(0.01).of(0.69)

您应该选择对您的用例有意义的分辨率。 (0.001,0.0001等)

© www.soinside.com 2019 - 2024. All rights reserved.