【问题标题】:How to test conditional ActiveRecord after_update callback with rspec?如何使用 rspec 测试条件 ActiveRecord after_update 回调?
【发布时间】:2017-07-17 10:46:12
【问题描述】:

我有一个触发工作的条件回调。如果管理器发生变化,它应该调用该方法

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

有人知道什么是最好的方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rspec


    【解决方案1】:

    我最终使用了 gem shoulda-callback-matchers

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

    【讨论】:

      【解决方案2】:

      这样的吗?

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        相关资源
        最近更新 更多