assert_equal表示<0.15>预期但<0.15>,但前提是该方法以某种方式计算0.15

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,所以我看不出是什么造成了这种情况.我花了太长时间考虑这个,希望有人可以指出罪魁祸首是什么.先谢谢你们.

Joh*_*n Y 9

浮点数无法准确表示; 你需要做的是assert_in_delta用来检查你是否在指定的范围内.

喜欢的东西assert_in_delta 0.15, @item.tax_rate, 0.001应该这样做:它会检查你的内预期值0.001.