6

当我有一个模型的工厂时,是否可以保留构建策略,该模型与第二个模型关联,而第二个模型本身与第三个模型关联?

在下面的示例中,帖子与用户相关联,用户与城市相关联。即使当:strategy => :build用于所有关联,post.userpost.user.city最终保存到数据库中。为了快速测试套件的利益,我可以防止这些数据库写入发生吗?

Factory.define do 
  factory :user do
    name "A User"
    association :city, :strategy => :build
  end

  factory :city do
    name "A City"
  end

  factory :post do
    title "A Post"
    body  "Some text here"
    association :user, :strategy => :build
  end
end

post = FactoryGirl.build(:post)

post.new_record?           # True
post.user.new_record?      # False
post.user.city.new_record? # False
4

3 回答 3

2

您是否尝试过替代块语法?

Factory.define do 
  factory :user do
    name "A User"
    city { |city| city.association :city, :strategy => :build }
  end

  factory :city do
    name "A City"
  end
end
于 2012-11-21T01:44:31.490 回答
1

看起来 FactoryBot(以前FactoryGirluse_parent_strategy作为配置选项添加到 v4.8.0 中。默认情况下它是关闭的,要打开它,请将以下内容添加到您的spec/rails_helper

FactoryGirl.use_parent_strategy = true

factory_botrepo上的相关拉取请求: https ://github.com/thoughtbot/factory_bot/pull/961

于 2018-01-22T14:23:23.953 回答
0

正如@messanjah 所说,但是对于旧版本(< v4.8.0),您可以执行以下操作:

association :user, :strategy => @build_strategy.class
于 2019-01-26T16:31:01.060 回答