测试定制例外有一个期望?

时间:2019-04-06 02:44:33

标签: ruby rspec rubocop

我有一个要测试的函数会在输入上引发异常,但是该异常还包含一些信息,而不仅仅是一条简单的消息,我也想对此进行测试。所以我做了类似as seen in the rspec documentation的事情:

it 'raises the correct exception' do
   expect { my_call }.to raise_error do |error|
     expect(error.some_field).to eq('some data')
   end
end

这很好用,但是与RSpec/MultipleExpectations警察犯规:

RSpec/MultipleExpectations: Example has too many expectations [2/1]

据我所知,在没有太多期望的情况下,不可能以这样的块形式使用raise_error,那有什么用呢?有什么方法可以在示例之外保存引发的异常,以便我可以正常进行规范,而无需在规范中进行涉及rescue的可怕操作吗?还是应该使用自定义raise_custom_error匹配器?

1 个答案:

答案 0 :(得分:0)

默认情况下,Rubocop我认为您会启用警告,即看到每个expect块中只有一个it。您可以通过添加以下代码在rubocop.yml中禁用它:

# Disables "Too many expectations."
RSpec/MultipleExpectations:
  Enabled: false

或者,如果您只想针对特定规格禁用它,则可以通过添加如下注释来做到这一点,请注意,您可以通过在注释中使用规则名称来禁用任何rubocop规则:

# rubocop:disable RSpec/MultipleExpectations
it 'raises the correct exception' do
  expect { my_call }.to raise_error do |error|
    expect(error.some_field).to eq('some data')
  end
end
# rubocop:enable RSpec/MultipleExpectations

it 'does something else' do
  expect(true).to be true
end

有关更多rubocop语法选项see this answer