欢迎并感谢所有收听的人。
我有一个可能产生错误的方法,我有一些特殊的逻辑,当错误发生时,在另一个异常被重新引发之前运行。
例如:
def some_cool_method
error_prone_logic
rescue StandardError => e
logging_methods
error_handling
raise SpecificException.new
end
等级库设置:
我正在为error_prone_logic
中使用的一个实体创建一个存根,并使其抛出如下异常:
before do
allow(some_entity_double).to receive(:work).and_raise(StandardError, 'RIP')
end
我的问题是,当我想测试在错误发生后运行的逻辑时,我想分离规范,我生成的代码必须总是测试异常:
it 'raises explicit error' do
expect { subject }.to raise_error(SpecificException)
end
it 'logs the error' do
expect(logger).to receive(:error)
expect { subject }.to raise_error(SpecificException)
end
it 'does error handling' do
expect(ErrorHandler).to receive(:handle)
expect { subject }.to raise_error(SpecificException)
end
如果每个用例末尾的expect { subject }.to raise_error(SpecificException)
缺失,则测试套件将无法运行。
所以我的问题是
有没有一种方法可以设置它,使我只有一个expect { subject }.to raise_error(SpecificException)
规范,其余的只Assert他们需要Assert的东西?
2条答案
按热度按时间hujrc8aj1#
怎么样错误提高失能到方法?
在这种情况下,您可以在 debugging 误引发测试之外的任何地方模拟它
lyr7nygr2#
如果应该允许该方法引发SpecificException,则只需在错误冒泡到测试时捕获该错误。
这与
expect { subject }.to raise_error(SpecificException)
发生的情况完全相同,但没有创建预期。注意the explicit use of subject in RSpec is considered a code smell。