sol*_*ell 4 testing unit-testing assert ruby-on-rails
所以对于这个模型方法:
def tax_rate
tax_rate = 0.0
tax_rate += STATE_TAX if state_taxable? #STATE_TAX = 0.1
tax_rate += IMPORT_TAX if imported? #IMPORT_TAX = 0.05
tax_rate
end
Run Code Online (Sandbox Code Playgroud)
此测试失败:
@item.update_attributes({:state_taxable => true,
:imported => true,
:price => 32.19})
assert_equal 0.15, @item.tax_rate
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
<0.15> expected but was <0.15>.
Run Code Online (Sandbox Code Playgroud)
但是,此测试将通过:
@item.update_attributes({:state_taxable => true,
:imported => false,
:price => 14.99})
assert_equal 0.1, @item.tax_rate
Run Code Online (Sandbox Code Playgroud)
因此,当tax_rate为0.0 + 0.1 + 0.05时,我得到错误,但是当它为0.0 + 0.1或0.0 + 0.05时,我得到错误.0.15都是Floats,所以我看不出是什么造成了这种情况.我花了太长时间考虑这个,希望有人可以指出罪魁祸首是什么.先谢谢你们.
浮点数无法准确表示; 你需要做的是assert_in_delta用来检查你是否在指定的范围内.
喜欢的东西assert_in_delta 0.15, @item.tax_rate, 0.001应该这样做:它会检查你的内预期值0.001.