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

时间:2019-03-14 18:30:06

标签: ruby rspec matcher

我什至不知道从哪里开始。很抱歉,如果这是重复的,但我什至不知道要搜索什么或这个特殊问题叫什么。

随机且并非经常如此,我的RSpec套件中的测试将失败,并且我会收到如下错误:

expected: 0.69
     got: 0.69 (0.69e0)

(compared using ==)

RSpec代码正在比较来自两个不同模型的两个Float,在完成规格时,它们应该是相同的值。有没有办法在命令控制台中重现此内容?我已经尝试了明显的东西(如下),但老实说我很茫然。如果我重新运行测试十次,则无法重现该问题。

0.69 == 0.69e0 => true
0.69 == 0.69 => true
6.9e-1 == 0.69 => true

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

测试浮点数时,建议您使用RSpec的be_within matcher

示例:

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

您应该选择一种适合您的用例的分辨率。 (0.001、0.0001等)