制造 gem 循环依赖

Fabrication gem cyclic dependency

我在使用 fabrication gem 时出现了循环依赖。在这里我会告诉你我做了什么。假设我有 2 个模型:

class User < AR::Base
  has_many :messages


class Message < AR::Base
  belongs_to :user

因此,它们的制造商将是:

Fabricator(:user) do
  # bla-bla-bla
  messages(count: 5)
end

Fabricator(:message) do
  # bla-bla-bla
  user
end

好像还可以吧?但是,当我 运行 Fabricate(:user)Fabricate(:message) 时,我得到了循环依赖,因为伪造消息会伪造新用户,伪造新用户会为他伪造消息等等。怎样才能避免这个恶性循环?

在这种情况下,我通常会有两个 user 制造商。

Fabricator(:user)

Fabricator(:user_with_messages, from: :user) do
  messages(count: 5)
end

您也可以执行此操作以使现有的工作发挥作用。

Fabricator(:user) do
  messages(count: 5) { Fabricate.build(:message, user: nil) }
end

保存用户时,AR会自动保存消息。它将处理设置正确的引用。