2010-01-14 9 views
12

Mam bloku kodu:szyderczy błędzie/wyjątek w RSpec (nie tylko jej rodzaj)

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 

Chcę sprawdzić, co się dzieje w tej sekcji if e.response_code.to_i == 503. Mogę drwić do_some_stuff wrzucić odpowiedni rodzaj wyjątek:

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

ale jak mogę kpić sam obiekt błędu powrotu 503 po odebraniu „RESPONSE_CODE”?

Odpowiedz

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