【发布时间】:2021-11-27 18:56:19
【问题描述】:
以下两个单独的测试正在处理它们各自的 json 字符串
assert_no_difference('Article.count') do
post array_api_v1_articles_path, params: @existing, as: :json
end
{ "items": { [
{ code: "00083", "sell_price": 0.01 }, ...
] } }
assert_changes articles(:fifty_five).sell_price, from: 9.99, to: 0.01 do
post array_api_v1_articles_path, params: @existing, as: :json
end
{ "items": { [
{ code: "00084", "sell_price": 0.01 }, ...
] } }
虽然前一种情况可以测量count 的变化,但后者——在方法中使用puts 命令返回新值时反映了变化
puts @article.sell_price
0.01
,断言失败:0.999e1 didn't change. Expected 9.99 to not be equal to 9.99.
那么这个测试应该如何进行呢?
【问题讨论】:
-
尝试对您要比较的数字进行四舍五入,它可能会出现一些小数差异,Minitest 没有完全打印出来。只要你可以这样做,如果舍入或强制转换是不可能的,那么请尝试使用
==。 -
尝试做
assert_changes articles(:fifty_five).reload.sell_price, ...,可能实例在内存中并且发布请求正在更改数据库但您没有重新读取数据库以获取新值 -
是的,我也试过了,得到
0.999e1 didn't change. Expected 9.99 to not be equal to 9.99.但重新加载是缺少的成分。发布了解决方案。