2010-01-14 44 views
12

我有这样的代码块:嘲讽在rspec的错误/异常(不只是它的类型)

def some_method 
    begin 
    do_some_stuff 
    rescue WWW::Mechanize::ResponseCodeError => e 
    if e.response_code.to_i == 503 
     handle_the_situation 
    end 
    end 
end 

我想测试一下这是怎么回事在if e.response_code.to_i == 503部分。我可以模拟do_some_stuff抛出正确类型的异常:

whatever.should_receive(:do_some_stuff).and_raise(WWW::Mechanize::ResponseCodeError) 

,但我怎么嘲笑错误对象本身,返回503,当它接收到“RESPONSE_CODE”?

回答

21
require 'mechanize' 

class Foo 

    def some_method 
    begin 
     do_some_stuff 
    rescue WWW::Mechanize::ResponseCodeError => e 
     if e.response_code.to_i == 503 
     handle_the_situation 
     end 
    end 
    end 

end 

describe "Foo" do 

    it "should handle a 503 response" do 
    page = stub(:code=>503) 
    foo = Foo.new 
    foo.should_receive(:do_some_stuff).with(no_args)\ 
    .and_raise(WWW::Mechanize::ResponseCodeError.new(page)) 
    foo.should_receive(:handle_the_situation).with(no_args) 
    foo.some_method 
    end 

end