随机 RSpec 比较浮点数失败(Eq 匹配器)
Random RSpec failures comparing Floats (Eq matcher)
我什至不知道从哪里开始。抱歉,如果这是重复的,但我什至不知道要搜索什么或这个特定问题的名称。
我的 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
这是测试浮点数的一般问题。使用 RSpec:
时,我总是将它们转换为字符串进行比较
expect(float.to_s).to eq '0.69'
测试浮点数时,推荐使用RSpec的be_within
matcher.
示例:
expect(my_float).to be_within(0.01).of(0.69)
您应该选择对您的用例有意义的解决方案。 (0.001、0.0001 等)
我什至不知道从哪里开始。抱歉,如果这是重复的,但我什至不知道要搜索什么或这个特定问题的名称。
我的 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
这是测试浮点数的一般问题。使用 RSpec:
时,我总是将它们转换为字符串进行比较expect(float.to_s).to eq '0.69'
测试浮点数时,推荐使用RSpec的be_within
matcher.
示例:
expect(my_float).to be_within(0.01).of(0.69)
您应该选择对您的用例有意义的解决方案。 (0.001、0.0001 等)