[英]Factory Girl Error with Nested Attributes & Rails 5
我有一个Company
这种模式has_many
Users
是belongs_to
的Company
。 我在Company
模型中也有一个回调,该回调调用了我要避免的外部服务。 我正在尝试使用linter设置FactoryGirl,但它始终会引发错误。
控制器的外观如下:
class CompanyController < ApplicationController
...
def new
@company = Company.new
@user = @company.users.build
end
def create
@company = Company.new(company_params)
@user = @company.users.first
...
end
...
end
该控制器可以在localhost和生产环境中正常工作,因此代码功能不一定没有问题-这是我遇到的测试问题。
我正在尝试按照以下方式创建工厂:
FactoryGirl.define do
factory :company do
name Faker::Company.name
association :user, strategy: :build
before(:create) do |company|
company.class.skip_callback(:create, :before, :my_callback)
end
end
factory :user do
email Faker::Internet.email
password "password"
password_confirmation "password
end
end
问题是,由于我要建立多个用户,我收到一条错误消息,指出用户company must exist
一个company must exist
,因为belongs_to
是必需的,而我收到一条错误消息,指出undefined method user=
。 我还尝试了许多其他变体,这些变体最终都没有跳过回调(例如在用户工厂中创建公司)。
我希望有人知道如何以与这种类型的控制器设置兼容的方式来建立工厂,或者是否应该以其他方式来构建没有嵌套属性的控制器?
在此先感谢您的帮助!
我本来只是添加评论,但我对此没有足够的声誉。
您没有显示模型和db表,但是我想您的users
表具有company_id
字段,而Company
模型具有has_many :users
。
这就是我在这种情况下使用工厂女工的方式:
用户工厂:
factory :user do
email Faker::Internet.email
password "password"
password_confirmation "password"
company
end
公司工厂:
factory :company do
name Faker::Company.name
end
然后在测试中您想要创建多个用户,对吗?
company = create(:company)
number_of_users = 5
create_list(:user, number_of_users, company: company)
这样,您创建的所有用户都将关联到同一家公司。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.