Ruby on Rails tests fonctionnels avec le plug-in d'authentification RESTful
-
22-08-2019 - |
Question
J'ai commencé à écrire des tests fonctionnels pour mes rails aujourd'hui app. J'utilise le plug-in d'authentification RESTful. Je suis tombé sur un couple de choses confus J'espère que quelqu'un peut me préciser.
1) J'ai écrit une fonction de connexion rapide parce que la plupart des fonctions dans mon application rails nécessitent une authentification.
def login_as(user)
@request.session[:user_id] = user ? user.id : nil
end
La question que je vois avec cette fonction, est-il feint essentiellement authentification. Devrais-je être inquiet à ce sujet? Peut-être qu'il est correct d'emprunter cette voie aussi longtemps que je teste la vraie méthode d'authentification quelque part. Ou peut-être c'est terrible pratique.
2) La deuxième chose est source de confusion que dans certains endroits dans mes tests fonctionnels, j'ai besoin le processus d'authentification complet se produire. Quand un utilisateur activé, j'ai la méthode do_activate créer des objets initiaux pour l'utilisateur. Il est analogue à la création d'un objet portable blanc et objet stylo pour une application de l'étudiant, si cela a du sens.
Ainsi, afin de tester correctement mon application, je dois l'utilisateur de frapper cet état d'activation de sorte que ces objets sont créés. Je suis actuellement en utilisant Factory Girl pour créer l'utilisateur, puis d'appeler la fonction login_as ci-dessus pour l'authentification faux.
Je suppose une autre option serait de sauter la séquence complète d'authentification et il suffit de créer les objets en blanc avec Factory Girl. Je pourrais tester l'authentification correcte ailleurs.
Que pensez-vous? Si je devais passer par la séquence correcte, pourquoi pas le code ci-dessous invoquer la fonction do_activate?
user = Factory.create(:user)
user.active = 1
user.save
Merci!
La solution
Faking il est parfaitement acceptable.
Cependant, écrire d'autres tests qui garantissent que les choses que vous voulez protéger sont protégés. Donc,
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
Ne hésitez pas à me frapper pour followups!