default_value_for 中使用的关联因 FactoryBot 而失败

Association used in default_value_for fails with FactoryBot

当使用 FactoryBot in conjunction of default_value_for gem 时,并且依赖必须存在的关联(如 belongs_to 来定义默认值时,我 运行 出现错误,告诉我该关系是未定义。

这是一个简化的例子:

class Post < ApplicationRecord
  default_value_for(:author_email) { |p| p.account.owner_email }

  belongs_to :account
end
# in my tests
create(:post, account: account)

当运行测试时,我得到

Failure/Error: default_value_for(:author_email) { |p| p.account.owner_email }

NoMethodError: undefined method `owner_email' for nil:NilClass

当我在控制器的上下文中使用它时它工作正常,但在测试中失败,我如何确保帐户已定义?

请确保在您的工厂中使用 initialize_with,因此在分配属性时,您的关联已经定义。

FactoryBot.define do
  factory :post do
    initialize_with { account.post.build(**attributes) }

    # insure there is always an account to build from
    association :account, factory: :account
  end
end