假设我有一个类包含这样的方法:
class MyClass
...
def self.some_class_method
my_instance = MyClass.new
self.other_class_method(my_instance)
raise 'ERROR'
end
def self.other_class_method(instance)
...
end
end
对它的测试看起来像这样:
require 'spec_helper'
describe MyClass do
describe '.some_class_method' do
context 'testing some_class_method' do
it 'calls other_class_method' do
MyClass.should_receive(:other_class_method)
MyClass.some_class_method
end
end
end
end
ERROR
导致测试错误,如果我删除了raise 'ERROR'
行,则测试通过。但在这里我只想测试some_class_method
是否会调用other_class_method
,无论之后发生了什么。我可以改变它以期望该方法引发错误,但这不是这个特定测试的目的。还有更好的方法吗?
答案 0 :(得分:1)
你可以在测试中解救异常。
describe MyClass do
describe '.some_class_method' do
context 'testing some_class_method' do
it 'calls other_class_method' do
MyClass.should_receive(:other_class_method)
begin
MyClass.some_class_method
rescue
end
end
end
end
end
答案 1 :(得分:0)
添加对方法引发错误的期望怎么样?这甚至可以增强您的测试:
describe MyClass do
describe '.some_class_method' do
context 'testing some_class_method' do
it 'calls other_class_method' do
expect(MyClass).to receive(:other_class_method)
expect { MyClass.some_class_method }.to raise_error("ERROR")
end
end
end
end