【发布时间】:2014-09-16 12:25:08
【问题描述】:
在迁移中为列设置默认值时,Rails 可以很好地选择:
def change
add_column :account, :role, :string, default: 'mother'
Account.update_all(role: 'mother')
end
在例如访问这个rails 控制台按预期工作:
Account.new.role #=> 'mother'
但是,出于某种原因,不在 rspec 规范中:
expect(Account.new.role).to equal 'mother' #fail
expect(Account.new.role).to not_be_nil #fail
我可以想象 rspec 模型规范试图避免加载模式,因此对属性的默认值一无所知。我不确定这是否是原因。
是否有一些设置、魔术或其他调用可以让我测试这些默认值的行为。
注意:我知道“after_initialize”技巧甚至整个 gem 都可以设置默认值,但是迁移中的这种默认设置对我来说似乎是最干净的。不过,我想测试一下。
【问题讨论】:
-
您是否为测试环境运行过迁移? RAILS_ENV=test rake db:schema:load 或 rake db:test:prepare。 RSpec 加载整个模式,否则您将无法使用 ActiveRecord 创建任何新的模型实例
-
哦。在 minitest/rails4 项目上工作了一段时间,这让我对 Rails 管理我的测试数据库感到非常自在。单独迁移测试可以解决问题。你能把它变成一个答案让我接受吗?
-
对我的回复进行了编辑
标签: ruby-on-rails activerecord rspec migration