如何获取创建的FactoryGirl对象?

时间:2013-06-02 07:18:59

标签: 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 CompanyUser < ActiveRecord::Base
  belongs_to :company
  belongs_to :user

我使用这个帮助函数来创建和登录:

def create_company_admin
  company_user = FactoryGirl.create(:company_user, :has_shopper, :has_company, :admin)
  user = User.first
  login_as user, scope: :user
  company_user
end

这是实际测试

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_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

如何在测试中获得用户,公司和company_user?

1 个答案:

答案 0 :(得分:1)

在助手中创建company_user。但是company_user属于user而且我没有看到您创建用户(在创建user = User.first后调用company_user但这将是nil)。

我也没有看到你创建公司。首先使用工厂,然后是公司,然后使用company_user(引用用户)在帮助程序中创建用户。

然后,您可以使用user = User.firstcompany = Company.firstcompany_user = CompanyUser.first

在测试中访问它们