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!

War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top