Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何获取创建的FactoryGirl对象?_Ruby On Rails_Factory Bot - Fatal编程技术网

Ruby on rails 如何获取创建的FactoryGirl对象?

Ruby on rails 如何获取创建的FactoryGirl对象?,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我有这些模型: class User < ActiveRecord::Base has_many :company_users, :dependent => :delete_all class Company < ActiveRecord::Base has_many :company_users, :dependent => :delete_all has_many :users, :through => :company_users class

我有这些模型:

class User < ActiveRecord::Base
  has_many :company_users, :dependent => :delete_all

class Company < ActiveRecord::Base
  has_many :company_users, :dependent => :delete_all
  has_many :users, :through => :company_users

class CompanyUser < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
这是实际测试

feature 'user listing' do
  background do
    company_user = create_company_admin
  end
  scenario 'getting user list' do
    visit '/companies'
    page.has_content? company_user.user.name
  end
end
直到他调用:company_user.user.name,这似乎不存在。在那里我得到了未定义的局部变量或方法“company\u user”

这是工厂:

factory :company_user, class: CompanyUser do
  authorized true

  trait :admin do
    admin true
  end

  trait :not_admin do
    admin false
  end

  trait :has_shopper do
    association :user, factory: :shopper
  end

  trait :has_company do
    association :company, factory: :company
  end
end
编辑:

这是购物者的工厂(这是一种用户)


如何在测试中获取用户、公司和公司用户?

在助手中创建一个
公司用户
。但是
company\u user
属于
user
,我看不到您正在创建一个用户(您称
user=user。在创建
company\u user
之后,首先是
nil

我也没有看到你创建一家公司。首先使用工厂,然后使用公司,然后使用公司用户(引用用户)在助手中创建用户


然后,您可以使用
user=user.first
company=company.first
company\u user=CompanyUser在测试中访问它们。首先在助手中创建一个
company\u用户
。但是
company\u user
属于
user
,我看不到您正在创建一个用户(您称
user=user。在创建
company\u user
之后,首先是
nil

我也没有看到你创建一家公司。首先使用工厂,然后使用公司,然后使用公司用户(引用用户)在助手中创建用户


然后,您可以使用
user=user.first
company=company.first
company\u user=CompanyUser.first

在测试中访问它们,但用户似乎是被创建的,因为当我进入firefox时,我看到一个登录的用户和一个公司,它们都被显示并链接到用户,所以这是正确的。我编辑了这个问题,将购物者工厂(实际上是一个用户)也包括在内。我尝试在助手中创建用户,但随后收到一条错误消息,表明邮件地址已被使用(这也证实了我的想法,即该用户已与company_用户一起创建)。在场景下添加:user=user.first和company=company.first时,它起作用。这是个好习惯吗?如果我有不止一个用户或公司怎么办?我会说,好的做法是只创建您需要的模拟对象,以便易于引用。您可以使用
Model.first
如果您只创建了一个,则在创建对象并在测试中引用该对象时,将电子邮件地址(如果是用户)传递给工厂。好的,那么您的用户是在购物者工厂中创建的,所以您不需要事先创建它(我假设您的公司工厂的工作原理相同)一旦你正确地引用了
company\u user=CompanyUser.first
你就可以引用
company=company\u user.company
user=company\u user.user
但是用户似乎是被创建的,因为当我进入firefox时,我看到一个登录的用户和一个公司,这两个都被显示出来并链接到用户,所以这是正确的。我编辑了这个问题,将购物者工厂(实际上是一个用户)也包括在内。我尝试在助手中创建用户,但随后收到一条错误消息,表明邮件地址已被使用(这也证实了我的想法,即该用户已与company_用户一起创建)。在场景下添加:user=user.first和company=company.first时,它起作用。这是个好习惯吗?如果我有不止一个用户或公司怎么办?我会说,好的做法是只创建您需要的模拟对象,以便易于引用。您可以使用
Model.first
如果您只创建了一个,则在创建对象并在测试中引用该对象时,将电子邮件地址(如果是用户)传递给工厂。好的,因此您的用户是在购物者工厂中创建的,因此只要您正确引用了
company\u user=CompanyUser,您就不需要事先创建它(我假设您的公司工厂也可以这样做)。首先
您可以引用
company=company\u user.company
user=company\u user.user
factory :company_user, class: CompanyUser do
  authorized true

  trait :admin do
    admin true
  end

  trait :not_admin do
    admin false
  end

  trait :has_shopper do
    association :user, factory: :shopper
  end

  trait :has_company do
    association :company, factory: :company
  end
end
factory :shopper, class: User do
  username "user"
  email "mail@mai.co"
  password "password1"
  after(:create) do |u|
    u.skip_confirmation!
    u.save!
  end
end