FactoryGirl工厂带有Trait(s),它返回带有弦乐键的Hash
我正在尝试使用FactoryGirl
来构建一个返回如下内容的Hash
:
=> {"3"=>"1", "6"=>"Word"}
我已经接近但不是100%那里……
我试过的第一个工厂定义看起来像这样:
factory :faqtory, class: Hash do |f| f.ignore do fake_word Faker::Lorem.word end f.sequence(1.to_s) { |n| n } f.send(2.to_s, fake_word.to_s.capitalize) initialize_with { attributes.stringify_keys } end
不幸的是,这不起作用:
1.9.3p448 :001 > FactoryGirl.build :faqtory ArgumentError: Trait not registered: fake_word
在那之后不起作用我假设对fake_word
的调用需要在一个块中,但这没有任何区别。
有什么建议?
忽略的属性定义为可以从其他属性使用的方法。 引用它们时,需要使用块定义依赖属性:
factory :faqtory, class: Hash do |f| f.ignore do fake_word { Faker::Lorem.word } end f.sequence(1.to_s) { |n| n } f.send(2.to_s) { fake_word.to_s.capitalize } initialize_with { attributes.stringify_keys } end
定义没有块的属性仅适用于文字值,如1
或"hello"
。
更新
如评论中所述,您可能希望fake_word
也使用块。
试试这个。
factory :faqtory, class: Hash do |f| fake_word = Faker::Lorem.word f.sequence(1.to_s) { |n| n } f.send(2.to_s, fake_word.to_s.capitalize) initialize_with { attributes.stringify_keys } end