FactoryGirl工厂带有Trait(s),它返回带有弦乐键的Hash

时间:2013-12-17 21:25:45

标签: ruby-on-rails ruby testing factory-bot

我正在尝试使用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的调用需要在一个块中,但这没有任何区别。

有什么建议吗?

2 个答案:

答案 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