2014-07-08 5 views
1

나는 HABTM PreferencesPerson 클래스를 가지고 있습니다 - 환경 설정을 추가하거나 제거 할 때 제 3 자 API에 알리는 메소드를 호출해야합니다.레일에서 HABTM after_add/after_remove 콜백 테스트 3.2

는 지금 내 사람 클래스는 다음과 같습니다

describe 'person.preferences #after_add' do 
    let(:person) { FactoryGirl.create(:person) } 
    let(:pref) { [Preference.find_by_preference_name("EmailMarketing")] } 

    it 'should trigger callback' do 
    person.preferences = pref 
    person.should_receive(:send_communication_preference_update).with(pref.first) 
    end 
end 

그러나이 작동하지 않습니다

class Person < ActiveRecord::Base 

    has_and_belongs_to_many :preferences, :after_add => :send_communication_preference_update 

    def send_communication_preference_update(preference) 
     ... 
    end 

end 

나는 다음과 같은 사양을 테스트하려면.

심지어 with(pref.first)을 잃으면 아래에서 같은 오류가 발생합니다.

내가 갖는 오류 :

Failure/Error: person.should_receive(:send_communication_preference_update).with(pref.first) 
     (#<Person:0x000000086297a8>).send_communication_preference_update(#<Preference preference_id: 4, preference_name: "EmailMarketing", created_at: "2014-07-08 08:31:23", updated_at: "2014-07-08 08:31:23", active: true, default_value: false>) 
      expected: 1 time 
      received: 0 times 

는 왜입니까?

+2

변화 라인이 사양에 주문 할당 호출하기 전에 : 당신이'should_receive'를 배치해야합니다 답변으로 당신의 코멘트를 추가하고 I하시기 바랍니다 – gotva

+0

을 할당 호출하기 전에 당신에게 정답을 줄 것입니다. – Ash

답변

2

변화 라인은 사양에 주문 : 당신이 should_receive을 배치해야

it 'should trigger callback' do 
    person.should_receive(:send_communication_preference_update).with(pref.first) 
    person.preferences = pref 
end 
2

테스트하려는 메소드가 호출되기 전에 should_receive를 설정해야합니다.