我有这样的方法
def className
def method_name
some code
rescue
some code and error message
end
end
那么,如何写下 rspec 来测试救援块..?
我有这样的方法
def className
def method_name
some code
rescue
some code and error message
end
end
那么,如何写下 rspec 来测试救援块..?
如果你想拯救,这意味着你期望some code
引发某种异常。
您可以使用RSpec 存根来伪造实现并强制出错。假设执行块包含一个可能引发的方法
def method_name
other_method_that_may_raise
rescue => e
"ERROR: #{e.message}"
end
在您的规范中将存根连接到该方法
it " ... " do
subject.stub(:other_method_that_may_raise) { raise "boom" }
expect { subject.method_name }.to_not raise_error
end
您还可以通过测试结果来检查救援处理程序
it " ... " do
subject.stub(:other_method_that_may_raise) { raise "boom" }
expect(subject.method_name).to eq("ERROR: boom")
end
不用说,您应该提出一个错误,它可能由实际实现引发,而不是一般错误
{ raise FooError, "boom" }
并且只救援那个Error
,假设这是相关的。
附带说明一下,在 Ruby 中,您可以定义一个类:
class ClassName
不是
def className
就像你的例子一样。
你可以存根返回错误
例如你有这样的方法类:
class Email
def self.send_email
# send email
rescue
'Error sent email'
end
end
所以引发错误的 rspec 是
context 'when error occures' do
it 'should return error message' do
allow(Email).to receive(:send_email) { err }
expect(Email.send_email).to eq 'Error sent email brand'
end
end