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_helper
、test_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,但你的里程可能会有所不同。
根据 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_helper
、test_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,但你的里程可能会有所不同。