Ruby 如何获得传递给工厂女孩方法的特征列表?

Ruby 如何获得传递给工厂女孩方法的特征列表?,ruby,rspec,factory-bot,Ruby,Rspec,Factory Bot,我如何在(:build)回调后在工厂的中获得传递给create的特征?我不知道有哪个工厂女孩功能明确支持这一点。但我可以想到两种局部解决方案,它们可能在特定情况下起作用: 在特征中设置暂时属性: #spec let(:price) { create :price,:some_trait,:my_trait } #factory FactoryGirl.define do factory :price, class: 'Prices::Price' do ... after

我如何在(:build)回调后在工厂的
中获得传递给
create
的特征?

我不知道有哪个工厂女孩功能明确支持这一点。但我可以想到两种局部解决方案,它们可能在特定情况下起作用:

  • 在特征中设置暂时属性:

    #spec
    let(:price) { create :price,:some_trait,:my_trait }
    
    #factory
    FactoryGirl.define do
      factory :price, class: 'Prices::Price' do
        ...
    
        after(:build) do |p,e|
    
          # How I can get the traits passed to the create method?
          # => [:some_trait,:my_trait]
    
          if called_traits_does_not_include(:my_trait) # fake code
            build :price_cost,:order_from, price:p
          end
        end
    
        ...
      end
    end
    
    trait :my_trait do
      using_my_trait
    end
    
    factory :price do
      transient do
        using_my_trait false
      end
    
      after :build do |_, evaluator|
        if evaluator.using_my_trait
          # Do stuff
        end
      end
    
    end
    
    此方法要求您要跟踪的每个特征都有一个瞬态属性

  • 如果您不需要知道在
    after:build
    回调中使用了哪些特征,但希望跟踪多个特征而不为每个特征添加临时属性,请将该特征添加到trait:after:build
  • 回调中的列表中:

    #spec
    let(:price) { create :price,:some_trait,:my_trait }
    
    #factory
    FactoryGirl.define do
      factory :price, class: 'Prices::Price' do
        ...
    
        after(:build) do |p,e|
    
          # How I can get the traits passed to the create method?
          # => [:some_trait,:my_trait]
    
          if called_traits_does_not_include(:my_trait) # fake code
            build :price_cost,:order_from, price:p
          end
        end
    
        ...
      end
    end
    
    trait :my_trait do
      using_my_trait
    end
    
    factory :price do
      transient do
        using_my_trait false
      end
    
      after :build do |_, evaluator|
        if evaluator.using_my_trait
          # Do stuff
        end
      end
    
    end
    
    trait:my_trait do
    之后:构建do | |,评估器|
    评价者特征