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