当我使用assert_equal检查整数模型属性的值时,返回的值是一个字符串。
我正在运行一个集成测试,其中更新了一个模型实例,然后检查该模型实例以确保值已更改。
数据库表:
create_table :launches do |t|
...
t.integer :result
...
t.timestamps
end
型号:
validates :result, presence: true, numericality: { only_integer: true, greater_than: 0 }
这是测试:
@launch.reload
assert_equal 2, @launch.result
并产生此错误:
test_edit_a_launch#LaunchesNewAndEditTest (0.99s)
Expected: 2
Actual: "2"
test/integration/launches_new_and_edit_test.rb:57:in `block in <class:LaunchesNewAndEditTest>'
以字符串形式返回值,并且与整数的比较失败。如果我将测试更改为:
@launch.reload
assert_equal 2, @launch.result.to_i
有效。但这没有任何意义,应该将模型中的整数值与预期的整数进行比较。在Rails控制台中操作对象时,该值为整数。
答案 0 :(得分:0)
问题是测试数据库和开发数据库(均为PostgreSQL)不同步。 “结果”列最初是“字符变量”。在开发过程中,我在迁移中将其更改为整数列并运行它。由于某种原因,迁移未在测试数据库上运行。
要修复此问题,我运行了以下命令:
rails db:reset RAILS_ENV=test