我一直在为此而奋斗。我希望能够覆盖特征之上的属性。我一直在阅读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:特征未注册:开始
答案 0 :(得分:10)
你需要在这里重新考虑一下你的策略 - 你有一个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)