Dav*_*ite 2 ruby testing rspec exception-handling exception
我有一类叫做RemoteError一个self.fatal方法就可以了.此方法作业基本上是捕获异常,将异常的详细信息发送到服务器,然后传播异常以杀死程序.
class RemoteError
def initialize(label, error)
@label = label
@error = error
end
def self.fatal(label, error)
object = new(label, error)
object.send
raise error
end
def send
# send the error to the server
end
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试为该RemoteError.fatal方法编写测试.由于raise在方法内的调用,这很困难.每次我运行我的测试时,raise显然会引发一个异常,我无法测试那个send被调用的东西.
describe "fatal" do
it "should send a remote error" do
error = stub
RemoteError.stub(:new) { error }
error.should_receive(:send)
RemoteError.fatal(stub, stub)
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法可以存根或以某种方式绕过raise这个特定的测试?
你可以包装在lambda中引发错误的方法......
it "should send a remote error" do
...
lambda { RemoteError.fatal(stub, stub) }.should raise_error(error)
end
Run Code Online (Sandbox Code Playgroud)
这实际上允许调用该方法,并从中获取返回值或引发的错误,然后使用该方法断言.should raise_error(error).这也使得如果没有从该调用引发错误,则测试将正常失败.
换句话说,你不需要也不想要存根raise.只需将其包装在lambda中,您的代码将继续执行,您应该能够确保发送消息,并且您的测试不会退出/崩溃.
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |