我有这样的方法
def className
def method_name
some code
rescue
some code and error message
end
end
那么,如何写下rspec来测试救援块..?
答案 0 :(得分:8)
如果您想要营救,则意味着您希望some code
引发某种异常。
您可以使用RSpec stubs伪造实施并强制执行错误。假设执行块包含可能引发的方法
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
如你的例子所示。
答案 1 :(得分:1)
你可以存根返回错误
例如你有这样的方法的类:
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