0

次のような都市モデルがあるとします。

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

EDIT解決策は、この回答で推奨されているように、使用 を停止して代わりにFactoryGirl使用することですFabrication

4

2 に答える 2

1

FactoryGirl が使用するモデルの初期化をオーバーライドする必要があります。

FactoryGirl.define do
  trait :explicit_initialize do
    initialize_with { new(attributes) }
  end

  factory :city, traits: [:explicit_initialize] do
    full_name 'San Francisco, CA, United States'
  end

end
于 2013-10-21T18:00:56.833 に答える