2012-03-12 4 views
0

J'ai été chargé de tester une application web non-rails utilisant du concombre. J'ai des tests de base en cours d'exécution, I.E. Je peux faire des choses commeSauver HTTP 404 Mechanize :: ResponseCodeError Exceptions avec Cucumber, Mechanize, Webrat

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

La prochaine chose que je voulais tester est que les pages non-existantes, en plus de présenter une page d'erreur amicale, reviennent le code de réponse correcte http (404).

Lorsque je visit la page 404 pendant le test de concombre, ce qui suit se produit.

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 

Cela est logique pour les pages tests que vous attendez d'exister, mais je voudrais vraiment pouvoir tester mes erreurs aussi bien.

Ma question est, comment puis-je sauver le Mechanize :: ResponseCodeError afin que je puisse vérifier l'exactitude de la page d'erreur 404?

Merci.

Répondre

3

Dès votre premier exemple, il semble que vous utilisez rspec, pour que vous puissiez l'utiliser de assertions pour vérifier l'erreur:

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 

Edit: mieux encore, vous pouvez utiliser la syntaxe du bloc de raise_error pour vérifier le code de réponse directement:

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

Merci beaucoup! J'ai dû exiger mécanize et mécanize/response_code_error dans mon env.rb pour que cela fonctionne, mais maintenant je peux tester l'exception. = D –