我有一个Person
类HABTM Preferences
- 当添加或删除首选项时,我需要调用一个通知第三方API的方法。
现在我的班级人员看起来像这样:
class Person < ActiveRecord::Base
has_and_belongs_to_many :preferences, :after_add => :send_communication_preference_update
def send_communication_preference_update(preference)
...
end
end
为了测试这个,我有以下规范:
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
然而这不起作用。
即使丢失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
为什么会这样?
答案 0 :(得分:2)
在调用要测试的方法之前,必须先设置should_receive。
答案 1 :(得分:2)
更改规范中的行顺序:您应在调用分配
之前放置should_receive
it 'should trigger callback' do
person.should_receive(:send_communication_preference_update).with(pref.first)
person.preferences = pref
end