ruby-on-rails - 整数模型属性在 assert_equal 调用中转换为字符串
问题描述
当我使用 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 控制台中操作对象时,该值是一个整数。
解决方案
问题是测试数据库和开发数据库(都是 PostgreSQL)不同步。“结果”列最初是“字符变量”。在开发过程中,我在一次迁移中将其更改为整数列并运行它。由于某种原因,迁移没有在测试数据库上运行。
为了修复它,我运行了以下命令:
rails db:reset RAILS_ENV=test
推荐阅读
- python - 使用 pip 安装后没有模块命名错误
- laravel-backpack - Backpack-for-laravel: 为browse_multiple显示图片
- python - 在 Python 中使用上下文管理器和条件变量来保证线程安全
- scala - 如何删除乱序的 Spark 值
- angular - 如何用子菜单组织模块?
- java - 如何在android中动态添加小部件?
- python - Django模型TextField显示邮政编码格式
- python - 在熊猫中找到适合多个条件的最小索引
- django - 获取字典键的值并在 HTML 模板中使用后无法使用静态图像。无法在 HTML 中使用值
- firebase - 未收到 Firebase 电话验证短信验证码