высмеивать ошибку / исключение в rspec (не только его тип) - PullRequest
13 голосов
/ 15 января 2010

У меня есть такой блок кода:

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"?

1 Ответ

22 голосов
/ 15 января 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...