пусто?не работает в Factory Girl - PullRequest
0 голосов
/ 18 марта 2011

У меня проблема, когда after_build, похоже, не запускается после фактической сборки. Как показано в примере ниже, after_build не должен создавать второй хвост при вызове через Factory.build: tail, поскольку хвост уже есть.

Кто-нибудь знает, как это решить? Или как сделать так, чтобы Factory Girl вел себя так, как ожидалось.

Не обращайте внимания на тот факт, что у кошек обычно нет нескольких хвостов и т. Д.:)

модели
class Cat
  include Mongoid::Document
  embeds_many :tails
end

class Tail
  include Mongoid::Document
  embedded_in :cat
end
Фабрики
Factory.define :cat do |a|
  a.after_build do |cat|
    Factory.build :tail, :cat => cat if cat.tails.empty?
  end
end

Factory.define :tail do |a|
  a.association :cat, :factory => :cat
end
проблема * * 1010

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Я бы воздержался от определения фабрики хвоста по умолчанию, которая создает кошку и встраивает хвост.

Factory.define :cat do |a|
  a.after_build do |cat|
    cat.tails << Factory.build(:tail) if cat.tails.empty?
  end
end

Factory.define :tail do |a|

end

Factory.define :cat_tail, :parent => :tail do |a|
  a.association :cat, :factory => :cat
end
0 голосов
/ 31 марта 2011

Это то, что я в конечном итоге использовал.Я последовал предложению Марселя об использовании отдельной фабрики, хотя after_build все еще вызывал ту же проблему (два хвоста вместо ожидаемого), поэтому он тоже должен был пойти.если cat.tails.empty?по какой-то причине не работает должным образом.

Factory.define :cat_tail, :parent => :tail do |a|
  a.association :cat, :factory => :cat
end

Factory.define :tail do |a|
end

Factory.define :cat do |a|
end
...