1

私はとを持っていますUser has_many :accounts, through: :rolesUser has_many :owned_accounts, through: :ownerships私はここでSTIを使用していOwnership < Rolesます。Ownershipモデルとアソシエーションの作業ファクトリを作成できずowned_account、テストが失敗します。

class User < ActiveRecord::Base
  has_many :roles
  has_many :accounts, through: :roles
  has_many :ownerships
  has_many :owned_accounts, through: :ownerships
end
class Account < ActiveRecord::Base
  has_many :roles
  has_many :users, through: :roles
end
class Role < ActiveRecord::Base
  belongs_to :users
  belongs_to :accounts
end
class Ownership < Role
end

私には、ユーザー、アカウント、および役割のための作業工場があります。ただし、Ownershipとowned_accountsアソシエーションのファクトリを作成することはできません。

FactoryGirl.define do
  factory :user do
    name "Elmer J. Fudd"
  end
  factory :account do
    name "ACME Corporation"
  end
  factory :owned_account do
    name "ACME Corporation"
  end
  factory :role do
    user
    account
  end
  factory :ownership do
    user
    owned_account
  end
end

これらのテストを開始しましたが、初期化されていない定数エラーが発生し、すべてのテストが失敗します。

describe Ownership do
  let(:user)    { FactoryGirl.create(:user) }
  let(:account) { FactoryGirl.create(:owned_account) }
  before do
    @ownership = user.ownerships.build
    @ownership.account_id = account.id
  end
  subject { @ownership }
  it { should respond_to(:user_id) }
  it { should respond_to(:account_id) }
  it { should respond_to(:type) }
end

1) Ownership 
     Failure/Error: let(:account) { FactoryGirl.create(:owned_account) }
     NameError:
       uninitialized constant OwnedAccount
     # ./spec/models/ownership_spec.rb:17:in `block (2 levels) in <top (required)>'
     # ./spec/models/ownership_spec.rb:21:in `block (2 levels) in <top (required)>'
4

1 に答える 1

3

エラーメッセージは、親を指定する必要があるためです。そうしないと、ファクトリ定義がその名前のActiveRecordクラス用であると想定されます。

factory :owned_account, :parent => :account do
  name "ACME Corporation"
end
于 2012-05-18T18:29:47.110 に答える