Спасение HTTP 404 Mechanize :: ResponseCodeError Исключения с помощью Cucumber, Mechanize, Webrat - PullRequest
1 голос
/ 12 марта 2012

Я был назначен ответственным за тестирование не-рельсового веб-приложения с использованием огурца.У меня есть базовое тестирование и работает, IE я могу делать такие вещи, как

Then /^the page should have a header$/ do
  response_body.should have_xpath(%\//header\)
end

Следующее, что я хотел проверить, это то, что несуществующие страницы, помимо представления дружественной страницы с ошибками, возвращают правильныеhttp код ответа (404).

Когда я visit 404 страницы во время теста на огурец, происходит следующее.

Scenario: Visit a url which does not lead to a page # features\404.feature:6
    Given I try to visit a fake page                  # features/step_definitions/404_steps.rb:1
      404 => Net::HTTPNotFound (Mechanize::ResponseCodeError)
      ./features/step_definitions/404_steps.rb:2:in `/^I try to visit a fake page$/'
      features\404.feature:7:in `Given I try to visit a fake page'
    When the page loads                               # features/step_definitions/home_steps.rb:5

Это имеет смысл для тестирования страниц, которые вы ожидаете существовать, но я действительно хотел бы иметь возможность проверить и мои ошибки.

У меня вопрос, как я могу спасти Mechanize :: ResponseCodeError, чтобы я мог проверить правильность страницы с ошибкой 404?

Спасибо.

1 Ответ

4 голосов
/ 12 марта 2012

Из вашего первого примера похоже, что вы используете rspec, поэтому вы можете использовать его утверждения для проверки ошибки:

When /^I try to visit a fake page$/ do
    lambda { 
        Mechanize.new.get('http://example.org/fake_page.html')
    }.should raise_error(Mechanize::ResponseCodeError, /404/)
end

Редактировать: еще лучше, вы можете использовать синтаксис блока rise_error для непосредственной проверки кода ответа:

.should raise_error{|e| e.response_code.should == '404'}
...