我一直在为此而奋斗.我希望能够覆盖特征之上的属性.我一直在阅读
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)