0

、、およびモデルUserがあります。ユーザーは単独で存在できます。アカウントは、ロールを通じてユーザーに関連付ける必要があります。アカウントには、「所有者」タイプのロール レコードが少なくとも 1 つ必要です。RSpec と FactoryGirl でこれをテストする方法がわかりません。AccountRole

# user_id, account_id, role
Role < ActiveRecord::Base
  belongs_to :user
  belongs_to :account
end

User < ActiveRecord::Base
  has_many :roles
  has_many :accounts, through: roles
  accepts_nested_properties_for :accounts
end

Account < ActiveRecord::Base
  has_many :roles
  has_many :users, through: roles
end

ユーザーがサインインしていない場合、Accounts.new はユーザー フォームとアカウント フォームを表示します。ユーザーがサインインしている場合、アカウント フォームのみが表示されます。問題は、関連付けをテストしようとするときに、RSpec で Role と Account がどのように表示されるかがわからないことです。

このテストは失敗します (配列は空に戻ります)。

describe Account do
  let(:user) { FactoryGirl.create(:user) }
  before { @account = user.accounts.build(title: "ACME Corporation", subdomain: "acme") }
  subject { @account }
  it { should respond_to(:users) }
  its(:users) { should include(user) }

次に、ユーザーがサインインしている場合とそうでない場合のテストがさらに複雑になります。同様のユースケースで参照できるサンプルコードはありますか? また、roles_spec で何をテストすればよいのか、accounts_spec/user_spec に何が属しているのかもわかりません。

工場:

FactoryGirl.define do
  factory :user do
    name                  "Mickey Mouse"
    email                 "mickey@disney.com"
    password              "m1ckey"
    password_confirmation "m1ckey"
  end
  factory :account do
    title     "ACME Corporation"
    subdomain "acme"
  end
  factory :role do
    user
    account
  end
end
4

1 に答える 1

1

他のオブジェクトに依存するオブジェクトをテストするには、モック フレームワークを使用して他のオブジェクトを"モック"します。これを可能にするモック フレームワークが多数あります。

于 2012-04-30T22:06:34.277 に答える