整数模型属性在assert_equal调用中转换为字符串

时间:2019-02-11 17:10:40

标签: ruby-on-rails ruby-on-rails-5

当我使用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控制台中操作对象时,该值为整数。

1 个答案:

答案 0 :(得分:0)

问题是测试数据库和开发数据库(均为PostgreSQL)不同步。 “结果”列最初是“字符变量”。在开发过程中,我在迁移中将其更改为整数列并运行它。由于某种原因,迁移未在测试数据库上运行。

要修复此问题,我运行了以下命令:

rails db:reset RAILS_ENV=test