繁体   English   中英

嵌套属性和Rails 5的Factory Girl错误

[英]Factory Girl Error with Nested Attributes & Rails 5

我有一个Company这种模式has_many Usersbelongs_toCompany 我在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM