首页 > 解决方案 > 如何检查异常块中的代码?

问题描述

我有 Sidekiq 工人。

class DeliverSmsMessageWorker
  include Sidekiq::Worker

  def perform(sms_message_id)
    ....
  rescue StandardError => e
    Rails.logger.error("SmsMessageWorker ERROR: #{e}")
    Bugsnag.notify(e)
  end
end

我写了规范,但是当我尝试测试时出现错误Rails.looger

describe DeliverSmsMessageWorker, type: :worker do
  subject(:worker) { DeliverSmsMessageWorker }

  context 'on exceptions' do
    let(:error) { StandardError.new('test exception') }

    before do
      allow(worker).to receive(:perform_async).with(sms_message.id).and_raise(error)
    end

    it 'message in logger' do

      Sidekiq::Testing.inline! do
        worker.perform_async(sms_message.id)
        expect(Rails.logger).to receive(:error).and_call_original
      end
    end
  end
end

运行此规范后,我收到错误消息。但为什么?

测试这两条线有什么意义吗?

1) DeliverSmsMessageWorker on exceptions message in the logger
 Failure/Error: worker.perform_async(sms_message.id)

 StandardError:
   test exception

标签: ruby-on-railsrspecrspec-railsrspec3rspec-sidekiq

解决方案


也许你应该在这里使用块语法raise_error

  Sidekiq::Testing.inline! do
    expect { worker.perform_async(sms_message.id) }.to raise_error { |error|
      expect(Rails.logger).to receive(:error).and_call_original
    }
  end

推荐阅读