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.
ok gut Ich habe es auf Ihre Weise versucht und es funktioniert jetzt gut. Danke vielmals! –
@LlamaTarianismus yup kein Problem :) –