【发布时间】:2018-11-07 16:28:35
【问题描述】:
我有 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
【问题讨论】:
-
尝试将
expect(Rails.logger).to...移动到第一行,在worker.perform_async...之前 -
正如我在您之前的问题中所说的那样 - 在您调用您正在测试的方法之前,必须消除模拟期望。
-
我做到了,但没有。
-
如果你用
expect(worker)...替换allow(worker)...? -
但我不需要这个检查,我需要检查
Rails.logger我想知道它是否会向日志发送消息。 :)
标签: ruby-on-rails rspec rspec-rails rspec3 rspec-sidekiq