【发布时间】:2014-07-08 08:50:04
【问题描述】:
我有一个 Person 类,HABTM Preferences - 添加或删除首选项时,我需要调用通知第三方 API 的方法。
现在我的 person 类看起来像这样:
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
这是为什么?
【问题讨论】:
-
更改规范中的行顺序:您应该在调用分配之前放置
should_receive -
请添加您的评论作为答案,我将奖励您正确的答案。
标签: ruby-on-rails ruby-on-rails-3.2 mocking rspec2 shoulda