【问题标题】:empty? not working in Factory Girl空的?不在工厂女孩工作
【发布时间】:2011-03-18 18:00:48
【问题描述】:

我有一个问题,在实际构建之后 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
问题
>> tail = Factory.build :tail
=> #<Tail _id: 4d839b5930efd431c7000008, >
>> tail.cat.tails.length
=> 2 # this should be 1
>> cat = Factory.build :cat
=> #<Cat _id: 4d839b6c30efd431c700000b, >
>> cat.tails.length
=> 1

【问题讨论】:

    标签: ruby-on-rails ruby callback factory factory-bot


    【解决方案1】:

    我不会定义一个默认的尾巴工厂,它会创建一只猫并嵌入尾巴。

    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
    

    【讨论】:

      【解决方案2】:

      这就是我最终使用的。我遵循了 Marcels 使用单独工厂的建议,尽管 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多