2010-07-23 3 views
7

Ich versuche gerade, Integration/Abnahmetests für eine neue Rails 3-Anwendung mit Gurke und Capybara einzurichten. (I gehobelt zunächst webrat zu verwenden, aber es scheint, dass es nicht Schienen unterstützt 3, so landete ich mit Capybara up)Wie folgt man einer Umleitung nach click_link/button mit Gurke und Capybara in Schienen?

Ich versuche, ein grundlegendes Login Test zum Laufen zu bringen:

Feature: Login user 
    In order to access the non-public parts of the site, 
    as a user, 
    I want to login to the site 

Scenario: login with valid credentials 
    Given I am on the login page 
    When I fill in "Email" with "[email protected]" 
    And I fill in "Password" with "pass" 
    And I press "Login" 
    Then I should be on the users home page 
    And I should see "Login successful" 

Der Problem ist jetzt, dass das Login-Formular mich an /user_session sendet, die mich dann an die Benutzer nach Hause /home umleitet. Die Gurke folgt nicht der Umleitung, die dazu führt, dass die Then I should be on the users home page Zeile fehlschlägt.

Wie kann ich Gurke/Capybara sagen, der Umleitung zu folgen, so dass ich auf der richtigen Seite bin, nachdem ich einen Knopf gedrückt habe, um einem Link zu folgen?

Es scheint eine follow_redirect! Methode im rack_test Treiber zu sein, die ich verwende, aber es ist privat und ich habe keine Ahnung, wie man diese Funktionalität nennt.

Vielen Dank im Voraus,
Simon

Antwort

14

Capybara folgt automatisch Weiterleitungen. Etwas anderes ist gebrochen.

+0

Das ist die Antwort, die ich am meisten fürchtete, aber ich habe das auch von einer anderen Quelle gehört. Müssen Sie das untersuchen ... –

+0

d'oh! Etwas stimmte nicht mit meinen Testdaten. Kein Wunder, dass es nicht funktionierte, wenn der Benutzer nicht in der Datenbank existierte. Danke für die Hilfe! –

+3

Es folgt Capybara Weiterleitungen. Rack :: Test folgt nur Redirect, wenn Sie 'follow_redirect!' Aufrufen: http://rdoc.info/github/brynary/rack-test/master/Rack/Test/Session – Timo

1

Etwas, das die Reihenfolge der Anweisungen schaltet funktionieren könnte:

Then I should see "Login successful" 
And I should be on the users home page 

Dann wird der Scheck für die aktuelle Seite nach der Prüfung auf der Seite Text passieren wird . Gurken-Tests erfordern viel Debugging, viel Glück!

6

Fügen Sie diese in Ihre Schritte:

When /^I dump.* the response$/ do 
    puts body 
end 

Dann, wenn Sie Ihre Tests sind misbehaving, können Sie hinzufügen „Und ich Dump die Antwort“ auf Ihre Schritte und sehen, wo es mit den Umleitungen oder was auch immer los ist.

+1

cooler Trick, viel Debugging-Arbeit sparen, thx – astropanic