1

私はこれらのモデルを持っています:

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 を取得するにはどうすればよいですか?

4

1 に答える 1

1

ヘルパーでcompany_user. しかし、company_user所属しており、ユーザーを作成しているとは思いません (作成後userに呼び出しますが、それは になります)。user = User.firstcompany_usernil

また、あなたが会社を作っているとは思いません。最初にファクトリを使用してヘルパーでユーザーを作成し、次に会社、次に company_user (ユーザーを参照) を作成します。

その後、、、およびを使用してuser = User.first、テストでそれらにアクセスできますcompany = Company.firstcompany_user = CompanyUser.first

于 2013-06-02T08:19:33.823 に答える