我一直在为此头疼。我希望能够覆盖特征之上的属性。我一直在阅读 documentation和一些互联网示例,但我无法让它工作。
这就是我想做的事情:
test "..." do
#overwrite start_time
middle = create( :basic_instant_instance, start: 1.hours.ago)
end
FactoryGirl.define do
factory :instant_instance do
trait :active_now do
#attributes...
transient do
start nil
end
#overwrite start_time
start_time start.present? ? start : Time.now
end
factory :basic_instant_instance, traits: [:active_now]
end
我不断得到:
ArgumentError: Trait not registered: start
最佳答案
你需要在这里重新考虑一下你的策略 - 你有一个 basic_instant_instance
不继承自 instant_instance
因此对 trait [:active_now] 或 start 属性一无所知。
您还需要在构建 Factory 实例时评估 start_time,方法是将它放在大括号中。否则,它将在 start 初始化之前进行评估。
尝试类似以下内容:
FactoryGirl.define do
factory :instant_instance do
trait :active_now do
#attributes...
transient do
start nil
end
#overwrite start_time
start_time { start.present? ? start : Time.now }
end
end
end
然后像这样调用它:
create( :instant_instance, start: 1.hours.ago, :active_now)
关于ruby-on-rails - 工厂女孩将参数传递给 trait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209066/