FactoryGirl - 从评估者检索构建策略

时间:2015-02-11 03:56:12

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

根据FactoryGirl文件:

  

之后(:build) - 在工厂建成后调用(通过   FactoryGirl.build,FactoryGirl.create)

在我的代码中,我希望回调逻辑根据构建策略(对于FactoryGirl称为strategy_name)而有所不同。

一些伪代码:

after(:build) do |o, evaluator|
  if evaluator.???.strategy_name == 'create'
    # logic
  elsif evaluator.???.strategy_name == 'build'
    # other logic
  end
end

有没有人知道如何在回调中利用evaluator获取strategy_name

1 个答案:

答案 0 :(得分:0)

在深入了解FactoryGirl源代码后,我无法找到支持这种方式的方法。我最终打开了Evaluator类并添加了一些谓词方法。将以下内容添加到您的spec_helpertest_helper或支持文件中。

module FactoryGirl
  class Evaluator
    def strategy_create?
      @build_strategy.class == Strategy::Create
    end

    def strategy_build?
      @build_strategy.class == Strategy::Build
    end

    def strategy_attributes_for?
      @build_strategy.class == Strategy::AttributesFor
    end

    def strategy_stub?
      @build_strategy.class == Strategy::Stub
    end

    def strategy_null?
      @build_strategy.class == Strategy::Null
    end
  end
end

在你的工厂:

after(:build) do |o, evaluator|
  if evaluator.strategy_create?
    # logic
  elsif evaluator.strategy_build?
    # other logic
  end
end

我正在使用FactoryGirl 4.4.0。看起来这将适用于> = 3.0.0,但您的里程可能会有所不同。