2016-03-27 8 views
0

Ich versuche, in dieser RoR-App ein- und ausloggen zu testen. Mein Test ist dies:Michael Hartls Ruby on Rails Tutorial Kapitel 8.3 | Nicht sicher, warum dieser Test fehlschlägt

test "login with valid information followed by logout" do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_redirected_to root_url 
    assert_not is_logged_in? # <-- this line is the one that cocks up. 
    follow_redirect! 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
end 

Die markierte Linie ist die einzige Linie, die fehlschlägt, und ich bin mir nicht sicher, warum. Es ist genau dasselbe wie im Buch selbst.

Senden einer Löschanfrage an den Logout-Pfad Routen zu dieser Funktion:

def destroy 
    logout 
    redirect_to root_url 
end 

Die Logout-Funktion ist dies:

def logout 
    session.delete(:user_id) 
    @current_user = nil 
end 

Und die is_logged_in? Funktion ist dies:

def is_logged_in? 
    !current_user.nil? 
end 

Alle 3 von denen sind genau die Art, wie das Buch sagte, sie sollten, bis auf die Namen. (Ich hatte meine eigenen besseren Namen, aber ich änderte sie aus Verzweiflung.)

Die Website scheint gut zu funktionieren. Here's ein Link, so dass Sie selbst sehen können. Ich kann mich ein- und ausloggen.

Ich habe assert_not woanders verwendet und es hat gut funktioniert. Zum Beispiel:

test "login with invalid information" do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, session: { email: "", password: "" } 
    assert_template 'sessions/new' 
    assert_not flash.empty? 
    get root_path 
    assert flash.empty? 
end 

Dieser Test ist erfolgreich. ("Flash" bezieht sich auf ein kleines Feld oben auf der Seite, das dem Benutzer in diesem Fall sagt, dass seine Anmeldeinformationen ungültig waren.)

Wer hat irgendwelche Ideen? Danke vielmals.

Antwort

0

Bis jetzt im Lernprogramm sollten Sie Sitzungen verwendet haben, und ich kann sehen, dass Sie eine Sitzung in Ihrer logout Methode löschen.

Auch „Hilfsmethoden sind in Tests nicht zur Verfügung, wir die current_user nicht als 8.15 in Listing verwenden können, aber die session Methode zur Verfügung steht“

Ihre is_logged_in? Methode wie folgt dann aussehen soll:

def is logged_in? 
    !session[:user_id].nil? 
end 
+0

ok gut Ich habe es auf Ihre Weise versucht und es funktioniert jetzt gut. Danke vielmals! –

+0

@LlamaTarianismus yup kein Problem :) –