我正在尝试编写一个测试,以确保rollbar确实报告错误。
it 'does not mute rollbar' do
expect(Rollbar).not_to receive(:silenced)
expect(Rollbar).to receive(:error).with(any_args).and_call_original
expect { query }.to raise_error(unknown_exception)
end不幸的是,在报告未挽救的错误时,rollbar不能在:error、:critical、:warning等方法中使用。
我在rollbar sourcecode中看到了report_exception_to_rollbar和call_with_rollbar,它们都是用Rollbar.scoped包装的。
因此,我尝试使用以下命令进行测试:
expect(Rollbar).to receive(:scoped).with(any_args).and_call_original
但它也告诉我:
Failure/Error: expect(Rollbar).to receive(:scoped).with(any_args).and_call_original
(Rollbar).scoped(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments如何确保异常被rollbar捕获并使用rspec进行测试?
发布于 2015-09-12 01:11:28
您希望确保运行的行是Rollbar.log call in exception_reporter.rb。(Rollbar.error、Rollbar.warning等只是Rollbar.log的包装器。)
试试这个:
expect(Rollbar).to receive(:log).with(any_args).and_call_original
发布于 2021-02-26 10:16:45
log不适合我,但error适合。下面是一个在Rails应用中使用ApplicationJob的示例。
describe "ApplicationJob" do
describe "rollbar" do
context "when rollbar is included" do
before do
class EasyJob < ApplicationJob
def perform(*)
end
end
allow_any_instance_of(EasyJob).to receive(:perform).and_raise(StandardError) # rubocop:disable RSpec/AnyInstance
end
it "makes a call to rollbar" do
expect(Rollbar).to receive(:error).with(any_args)
expect { EasyJob.perform_now }.to raise_error(StandardError)
end
end
context "when rollbar is NOT included" do
before do
class HardJob < ActiveJob::Base
def perform(*)
end
end
allow_any_instance_of(HardJob).to receive(:perform).and_raise(StandardError) # rubocop:disable RSpec/AnyInstance
end
it "does NOT make a call to rollbar" do
expect(Rollbar).not_to receive(:error)
expect { HardJob.perform_now }.to raise_error(StandardError)
end
end
end
endhttps://stackoverflow.com/questions/32528479
复制相似问题