【发布时间】:2013-10-21 11:37:55
【问题描述】:
假设我有一个城市模型,其中:
class city
field :full_name, type: String # San Francisco, CA, United States
field :_id, type: String, overwrite: true, default: ->{ full_name }
end
假设我在 /spec/factories/cities.rb 中定义了一个工厂:
FactoryGirl.define do
factory :city do
full_name 'San Francisco, CA, United States'
end
end
在其中一个规范中运行以下代码:
city_attrs = { full_name: 'San Francisco, CA, United States' }
City.create! city_attrs
=> #<City _id: San Francisco, CA, United States, full_name: "San Francisco, CA, United States">
FactoryGirl.create(:city)
=> #<City _id: , full_name: "San Francisco, CA, United States">
如何在不将以下代码添加到 /spec/factories/cities.rb 的情况下解决此问题?
before(:create) do |city, evaluator|
city.id = city.full_name
end
编辑
解决方案是停止使用FactoryGirl,而是按照this answer 中的建议使用Fabrication
【问题讨论】:
-
为什么不直接添加代码?
-
在某些情况下,模型将具有回调过程,这将改变它的许多属性...我希望
FactoryGirl创建遵循此回调,而不是提供此类回调before(:create) -
如果您不使用
ActiveRecord,请您至少提及您正在使用的数据库适配器吗? -
你试过打电话给apply_defaults 吗?
-
apply_defaults没用
标签: ruby-on-rails rspec mongoid factory-bot rspec-rails