2017-02-26 35 views
2

我有触发作业的条件回调。如果经理发生变化,应该调用方法如何使用rspec测试条件ActiveRecord after_update回调?

class Employee < ActiveRecord::Base 
    after_update :employee_manager_on_change, if: :employee_id_changed? 

    def employee_manager_on_change 
    EmployeeManagerChangedJob.perform_later(id) 
    end 
end 

我很难测试这个。我需要像

context 'when changing manager' do 
    subject { user.manager = new_manager } 

    it 'calls employee_manager_on_change' do 
    expect { suject.run_callbacks :update }.to receive(:employee_manager_on_change) 
    end 
end 

任何人都知道什么是最好的方法呢?

回答

2

我结束了使用宝石shoulda-callback-matchers

context 'callbacks' do 
    it { is_expected.to callback(:employee_manager_on_change).after(:update).if :manager_id_changed? } 
end 
0

任何这样的事情?

context 'when changing manager' do 
    before { user.manager = new_manager } 

    it 'calls employee_manager_on_change' do 
    user.save 
    expect(user).to receive(:employee_manager_on_change) 
    end 
end 

你甚至可以指定多少时间的方法也被称为

expect(user).to receive(:employee_manager_on_change).once