8

J'ai commencé à écrire des tests fonctionnels pour l'application mes rails aujourd'hui. J'utilise le plugin d'authentification RESTful. Je suis tombé sur un couple de choses confus, j'espère que quelqu'un peut clarifier pour moi.Tests fonctionnels Ruby on Rails avec le plugin d'authentification RESTful

1) J'ai écrit une fonction de connexion rapide car la plupart des fonctions de mon application rails nécessitent une authentification.

def login_as(user) 
    @request.session[:user_id] = user ? user.id : nil 
end 

Le problème que je vois avec cette fonction, c'est qu'il fausse fondamentalement l'authentification. Devrais-je être inquiet à ce sujet? Peut-être que c'est correct d'aller dans cette voie tant que je teste la vraie méthode d'authentification quelque part. Ou peut-être que c'est une pratique terrible.

2) La deuxième chose qui prête à confusion est que dans certains endroits de mes tests fonctionnels, j'ai besoin du processus d'authentification complet. Lorsqu'un utilisateur est activé, la méthode do_activate crée des objets initiaux pour l'utilisateur. Il est analogue à la création d'un objet bloc-notes vierge et d'un objet plume pour une application étudiante, si cela a du sens.

Donc, afin de tester correctement mon application, j'ai besoin que l'utilisateur atteigne cet état d'activation afin que ces objets soient créés. J'utilise actuellement Factory Girl pour créer l'utilisateur, puis j'appelle la fonction login_as ci-dessus pour fausser l'authentification.

Je suppose qu'une autre option consisterait à ignorer la séquence d'authentification complète et à créer simplement les objets vides avec Factory Girl. Je pourrais tester la bonne authentification ailleurs.

Qu'en pensez-vous? Si je devais passer par la séquence appropriée, pourquoi le code ci-dessous n'appelle-t-il pas la fonction do_activate?

user = Factory.create(:user) 
user.active = 1 
user.save 

Merci!

+0

[Voici une question similaire que j'ai posée] (http://stackoverflow.com/questions/64827/rails-restful-authentication-rsp-how-to-test-new-models-that-require-authen) et un tas de liens que j'ai tirés ensemble. – srboisvert

Répondre

7

Façonner est parfaitement acceptable. Cependant, écrivez d'autres tests qui garantissent que les choses que vous voulez protéger sont protégées. 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 

N'hésitez pas à me contacter pour faire un suivi!