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
当使用 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