如何检查异常块中的代码?

时间:2018-11-07 16:28:36

标签: ruby-on-rails rspec rspec-rails rspec3 rspec-sidekiq

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

1 个答案:

答案 0 :(得分:2)

也许您应该在1中使用块语法:

raise_error