Как я могу проверить код в блоке исключений? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть работник 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 голосов
/ 07 ноября 2018

Возможно, вам следует использовать синтаксис блока для 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
...