ruby-on-rails之在 Rails 3.2 上测试 HABTM after_add/after_remove 回调

落叶无声 阅读:74 2024-02-27 23:08:18 评论:0

我有一个 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

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


标签:Ruby
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号