【问题标题】:FactoryGirl: specifying attributes on associated modelFactoryGirl:在关联模型上指定属性
【发布时间】:2016-06-01 18:54:02
【问题描述】:

我有两个简单的工厂:一个用于user,一个用于blog。创建博客时,必须有一个关联的user,所以这在博客工厂中有所体现:

FactoryGirl.define do
  factory :user do
  end
end

FactoryGirl.define do
  factory :blog do
    user #specifying the required association
  end
end

现在我可以像这样在规范中创建博客:

blog = create(:blog)

我不确定规范中的具体操作是如何在首次创建blog 记录时立即在关联的user 记录上指定一些自定义属性。

例如:当创建blog 记录(这也创建关联的user 记录)时,我想在关联的user 记录上指定first_name 属性。比如:

blog = create(:blog, associated_user: (first_name: 'foobar) )

上面的语法不起作用,但我想做类似的事情。我确实看过factory girl docs,我一直在谷歌搜索,但一直无法弄清楚这一点。

问题:在使用工厂女孩创建对象时,如何在关联对象上设置一些自定义属性?

【问题讨论】:

  • 您查看过 FactoryGirl 文档中的关联吗?我认为您正在寻找的东西称为瞬态rubydoc.info/gems/factory_girl/file/…
  • @JeffPrice 是的,我确实看过关联部分。它没有显示我如何在实际规范中自定义类型的属性。我所看到的只是它展示了如何为工厂使用继承,以便您可以通过这种方式指定关联的特征,但这感觉有点矫枉过正,因为我只想为一个小规范指定这些属性。

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


【解决方案1】:

您可以简单地使用所需的对象设置相应的调用参数。

user = create(:user, first_name: "Harald")
blog = create(:blog, user: user)
# or inline if preferred
blog = create(:blog, user: create(:user, first_name: "Heinz"))

注意:不要忘记尽可能使用构建而不是创建来加快测试速度:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多