2015-09-30 6 views
1

У меня возникли проблемы с получением простой спецификации STI toa-matcher для правильной передачи.Тестирование ассоциаций STI с меридианами и FactoryGirl

Вот ассоциации ..

class User < ActiveRecord::Base 
end 

class Provider < ActiveRecord::Base 
    belongs_to :practice_manager, class_name: 'User', foreign_key: :user_id 
end 

class PracticeManager < User 
    has_many :providers 
end 

..и мои заводы ..

FactoryGirl.define do 
    sequence(:email) { |n| "person#{n}@email.com" } 
    sequence(:password) { |p| "thepassword123" } 
    sequence(:password_confirmation) { |p| "thepassword123" } 

    factory :user do 
     email 
     password 
     password_confirmation 
    end 

    factory :practice_manager, parent: :user, class: 'PracticeManager' do 
    end 

    factory :provider_user, parent: :user, class: 'ProviderUser' do 
    end 

    factory :provider do 
     sequence(:first_name) { |n| "Sally#{n}" } 
     sequence(:last_name) { |n| "Harmon#{n}" } 
     sequence(:npi) { |n| n.to_s.rjust(10, '0')} 
     sequence(:sf_contact_ident) { |s| s.to_s.rjust(15, '0') } 
     practice_manager 
    end 
end 

..as также тест, который я пытаюсь получить, чтобы пройти.

require 'rails_helper' 

RSpec.describe PracticeManager, type: :model do 
    describe "Relationships" do 
     it { should have_many(:providers).class_name('User').with_foreign_key(:user_id) } 
    end 
end 

Одна вещь, которую я нашел, что я могу получить тест пройти, если я добавляю class_name: 'User', foreign_key: :user_id к has_many стороне ассоциации, но я боюсь, что это ложное срабатывание. Это не кажется правильным.

Любые предложения приветствуются.

ответ

1

Я думаю, вы смешиваете свои ассоциации.

Чтобы проверить has_many в рамках модели PracticeManager, вы просто хотите:

RSpec.describe PracticeManager, type: :model do 
    describe "Relationships" do 
    it { should have_many(:providers) } 
    end 
end 

Если вы хотите проверить свою модель провайдера, то вам потребуется дополнительные опции:

RSpec.describe Provider, type: :model do 
    it { should belong_to(:practice_manager).class_name('User').with_foreign_key(:user_id) } 
end 
+0

Спасибо Эллиот! Вот и все. – shroy

Смежные вопросы