Rails Funktionstest mit dem REST-Authentifizierungs-Plug
-
22-08-2019 - |
Frage
Ich begann Funktionstests für meine Rails-Anwendung heute zu schreiben. Ich verwende den RESTful-Authentifizierungs-Plug. Ich lief in ein paar verwirrende Dinge, die ich hoffe, jemand kann mir erklären.
1) Ich schrieb eine schnelle Login-Funktion, da die meisten Funktionen in meiner Rails-Anwendung Authentifizierung erfordern.
def login_as(user)
@request.session[:user_id] = user ? user.id : nil
end
Das Problem, das ich mit dieser Funktion zu sehen, ist es im Grunde Authentifizierung täuscht. Soll ich darüber Sorgen machen? Vielleicht ist es in Ordnung, diesen Weg zu gehen, solange ich die wahre Authentifizierungsmethode irgendwo testen. Vielleicht ist diese schreckliche Praxis.
2) Die zweite verwirrend ist, dass in meinem Funktionstests an einigen Stellen, ich brauche den vollständigen Authentifizierungsprozess geschehen. Wenn ein Benutzer aktiviert ist, habe ich die do_activate Methode einige erste Objekte für den Benutzer erstellen. Es ist analog zu der Erstellung eines leeren Notizbuch Objekt und Stift Objekt für einen Student Anwendung, wenn der Sinn macht.
Um also richtig meine Anwendung zu testen, muß ich den Benutzer, dass Aktivierungszustand treffen, um diese Objekte erstellt werden. Ich bin derzeit Factory Girl den Benutzer zu erstellen, und dann ruft die login_as funktionieren oben zu fälschen Authentifizierung.
Ich denke, eine andere Option wäre die vollständige Authentifizierungssequenz zu überspringen und nur die leeren Objekte mit Factory Girl erstellen. Ich konnte die korrekte Authentifizierung testen woanders.
Was denken Sie? Wenn ich durch die richtige Reihenfolge gehen sollte, warum ist nicht der Code unter Berufung auf die do_activate Funktion?
user = Factory.create(:user)
user.active = 1
user.save
Danke!
Lösung
Faking es durchaus akzeptabel ist.
Allerdings schreiben andere Tests, die sicherstellen, dass die Dinge, die Sie geschützt wollen geschützt werden. So
test "it should show the profile page" do
user = Factory(:user)
login_as(user)
get :show, :id => user
assert_response :success
end
test "it should not show the profile page cos I'm not logged in" do
user = Factory(:user)
get :show, :id => user
assert_response :redirect
end
Sie können mich für followups schlagen up!