ruby-on-rails - 如何检查异常块中的代码?
问题描述
我有 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
解决方案
也许你应该在这里使用块语法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
推荐阅读
- python - 将 tf.nn.dropout() 与 3D-CNN 一起应用的问题
- javascript - 如何在我的角度项目中添加气候时钟小部件
- node.js - 具有联合类型的 ajv 数组
- node.js - 如何在 React 中有条件地渲染我的组件?根据我的问题,我不知道这是否是一个合适的标题
- r - 将分层json解析为R中的表
- javascript - 两个数组的 Firebase Firestore 查询
- c++ - back_inserter如何判断容器的类型
- cassandra - 连接到 Cassandra 时连接被拒绝
- python - 在哪里可以看到 /usr/lib/python3.x 下的 python 列表代码?
- discord - Discord.js 显示“message.author.tag | message.content”