FactoryGirl.define do
factory :costs_estimator do
ignore do
detailed_outcome_estimate nil
finance_estimate { detailed_outcome_estimate.try(:finance_estimate) }
task_estimators do
if detailed_outcome_estimate.present?
[ build(:task_estimator) ]
end
end
end
end
initialize_with do
new(finance_estimate, task_estimators)
end
end
我使用初始化程序构建了一个名为costs_estimator的模型,我为它添加了上面的工厂。现在的问题是,当我运行RSpec时,其他测试报告错误:
factory_girl-4.2.0/lib/factory_girl/evaluator.rb:42:in `method_missing':
undefined method `finance_estimate' for #<FactoryGirl::SyntaxRunner:0x00000009c542a8>
(NoMethodError)...
有没有人知道这家工厂发生了什么以及为什么它会影响其他测试?如果您需要更多信息,请与我们联系。
答案 0 :(得分:2)
您可能希望initialize_with
仅适用于:costs_estimator
工厂。如果是这样,请将其移到该定义中:
FactoryGirl.define do
factory :costs_estimator do
ignore do
detailed_outcome_estimate nil
finance_estimate { detailed_outcome_estimate.try(:finance_estimate) }
task_estimators do
if detailed_outcome_estimate.present?
[ build(:task_estimator) ]
end
end
end
initialize_with do
new(finance_estimate, task_estimators)
end
end
end
factory_girl确实允许你在顶层定义initialize_with
,在这种情况下它将适用于所有工厂,但这肯定会破坏那些没有定义finance_estimate
和{{1}的工厂它可能甚至不能用于虚拟属性,因为它们只在单个工厂的上下文中定义。