我正在尝试使用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
的调用需要在一个块中,但这没有任何区别。
有什么建议吗?
答案 0 :(得分:2)
忽略的属性定义为可以从其他属性使用的方法。引用它们时,需要使用块来定义依赖属性:
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
也使用块。
答案 1 :(得分:0)
试试这个。
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