89 votes

Déraciner l’authentification dans spec demande

Lors de l’écriture d’une spécification de requête, comment vous définir les séances ou talon méthodes des contrôleurs ? J’essaie le talon sur l’authentification dans mes tests d’intégration - rspec/demandes

Voici un exemple d’un test

Le programme d’assistance :

Et l’ApplicationController qui gère l’authentification :

Pourquoi n’est-il pas possible d’accéder à ces ressources ?

106voto

David Chelimsky Points 6430

Une demande spec est un wrapper mince autour d' ActionDispatch::IntegrationTest, ce qui ne fonctionne pas comme le contrôleur spécifications (qui s'enroulent ActionController::TestCase). Même si il y a une séance de méthode, je ne pense pas qu'il est pris en charge (c'est à dire que c'est probablement parce qu'un module est inclus pour d'autres utilitaires comprend également que la méthode).

Je voudrais vous recommandons de vous connecter en détachement à toute action que vous utiliser pour authentifier les utilisateurs. Si vous faites le mot de passe "mot de passe" (par exemple) pour tous les Utilisateurs des usines, alors vous pouvez faire quelque chose comme ceci:

def login(utilisateur)
 post login_path, :login => de l'utilisateur.login :mot de passe => 'mot de passe'
fin

65voto

fearless_fool Points 9190

BTW, réponse de @David Chelimsky doive tord si vous utilisez la Devise. Ce que je fais dans mon intégration / requêtes test (Merci à ce post de StackOverflow) :

3voto

turboladen Points 356

FWIW, dans le portage de mes tests Test::Unit à RSpec, je voulais être capable de se connecter avec plusieurs sessions (legs) dans ma fiche de demande. Il a eu quelques recherches, mais a obtenu cela fonctionne pour moi. À l’aide de Rails 3.2.13 et RSpec 2.13.0.

Et...

Edit: correction faute

0voto

itsnikolay Points 1684

Il suffit d’ajouter à `` la ligne suivante

-1voto

RDX Points 7538

Vous pourriez assez facilement écraser la session aussi bien.

Tous les opérateurs spéciaux rubis sont en effet des méthodes. Appel à est le même que , qui signifie est juste une méthode. De même, est le même que l’appel de méthode sur , comme``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X