我有一个要测试的函数会在输入上引发异常,但是该异常还包含一些信息,而不仅仅是一条简单的消息,我也想对此进行测试。所以我做了类似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
匹配器?
答案 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