2012-03-12 38 views
0

我負責使用黃瓜測試非rails web應用程序。我有基本的測試和運行,I.E.我可以做這樣的事情救援HTTP 404機械化:: ResponseCodeError黃瓜,機械化,Webrat的異常

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錯誤頁面的正確性?

謝謝。

回答

3

從你的第一個例子,它看起來像你使用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 

編輯:更妙的是,你可以使用的raise_error塊語法驗證直接回復密碼:

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

非常感謝!我必須要求在env.rb中機械化和機械化/ response_code_error才能完成此工作,但現在我可以測試異常。 = d – 2012-03-12 05:44:46