确保 Rollbar 报告了 RSpec 错误

Fil*_*uzi 5 ruby rspec ruby-on-rails ruby-on-rails-4 rollbar

我的类中的逻辑有时会Rollbar.silenced用来忽略某些异常(因此它们不会被报告)。

我正在尝试编写一个测试,以确保 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,在报告无法挽救的错误时:error,rollbar 不使用 in 、等方法。:critical:warning

我看到 report_exception_to_rollbarcall_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
Run Code Online (Sandbox Code Playgroud)

如何确保异常被 rollbar 捕获并使用 rspec 进行测试?

小智 3

您要确保运行的行是exception_reporter.rb 中的 Rollbar.log 调用。(Rollbar.errorRollbar.warning等只是 的包装Rollbar.log。)

尝试这个:

expect(Rollbar).to receive(:log).with(any_args).and_call_original