【发布时间】:2018-05-19 15:28:49
【问题描述】:
我有一个方法如下:
if response.fetch('ok')
response.fetch(response_key) { [] }
elsif response.fetch('error') == 'token_revoked'
ErrorReporter.increment('access_revoked', source: { account_id: account_id }, sporadic: true)
fail(RemoteService::AccessRevoked, 'Our access to your account was revoked, please re-authorize.')
else
ErrorReporter.increment(
'bad_request',
source: {
account_id: account_id
error: response.fetch('error')
},
sporadic: true
)
fail(RemoteService::InvalidRequest, 'Something went wrong communicating with the remote service, please try again')
end
当请求返回 token_revoked 错误时,我正在尝试测试场景。我想确保测试指定在这种情况下,我们将错误报告给我们的 ErrorReporting 服务。
所以,我的规范看起来像这样:
it 'records the failure with our error reporting service' do
expect(ErrorReporter).to receive(:increment).with(
'bad_request',
source: {
account_id: 1
},
sporadic: true
)
available_channels.fetch
end
但是,此规范总是失败,因为在调用 ErrorReporter 后,代码会立即调用 fail,这使我的规范失败。有谁知道如何在处理我知道代码现在将抛出的不可避免的异常时验证对我的错误报告器的调用?
【问题讨论】:
-
不,这没有帮助,之后的规范处理了我期望抛出异常的事实,在这里我试图断言我们将错误发送到我们的服务 在抛出异常之前。
-
只需将对
available_channels.fetch的调用封装在begin ... rescue RemoteService::InvalidRequest块中。 -
@Stefan 打败了我
标签: ruby-on-rails ruby rspec exception-handling