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

FactoryGirl - Retrieving the build strategy from an evaluator

根据 FactoryGirl 文档:

after(:build) - called after a factory is built (via 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

在深入研究 FactoryGirl 源代码后,我找不到支持的方法来执行此操作。我最终打开了 Evaluator class 并添加了一些谓词方法。将以下内容添加到您的 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,但你的里程可能会有所不同。