django - obtenir de l'utilisateur connecté dans le client de test
Dans un écrit de django test, comment puis-je obtenir de l'actuel de l'utilisateur connecté?
Par exemple c'est le test que j'ai envie d'écrire:
def test_author_set_once(self):
self.client.login(username='Adam', password='password')
#create an object and test the author is adam
self.client.login(username='Barry', password='password')
#modify the first object and test that the author has not changed
Donc, je veux être en mesure de dire quelque chose comme...
self.assertEqual(object.author, self.client.user)
(mais je ne peux pas)
La façon dont j'ai codé ça pour le moment, c'est comme cela:
self.client.login(username='Adam', password='password')
self.user = User.objects.get(username='Adam')
#create an object
self.assertEqual(object.author, self.user)
Cela repose sur l'hypothèse que la demande.l'utilisateur est le même que pour un utilisateur particulier de l'objet. Je suppose que c'est OK, mais il semble un peu maladroit.
Est-il de toute façon à éviter l'hypothèse?
Vous devez vous connecter pour publier un commentaire.
Le client de test est demande agnostique. Il ne fournit pas en soi de détenir des informations sur ce que les utilisateurs sont connectés. (N'votre serveur web ou le serveur de développement de Django, soit, pour des raisons évidentes, et ces mêmes raisons valables).
login
est tout simplement une méthode pratique sur le client de test essentiellement à imiter un POST pour/login/
à la définition des informations d'identification utilisateur. Rien de plus.Le réel de l'utilisateur est disponible sur le
request
tout comme dans une vue. Cependant, puisque vous n'avez pas un accès direct à la vue, Django faitrequest
disponible sur la vue de la réponse. Après vous utilisez le client de test de charge d'une vue, vous pouvez stocker le résultat et puis obtenir de l'utilisateur via:Plus récentes versions de Django utilisera:
En fait, vous ne pouvez pas accéder à l'utilisateur en cours par l'intermédiaire d'un test de réponse du client.
Cependant, vous pouvez vérifier si l'utilisateur est connecté. L'inspection
self.client.session
fera:Il y a un réponse plus détaillée pour cela.
get_user
à partir d'une réponse à ma propre réponse, puis j'ai mis à jour sur la base que la meilleure approche. En tant que telle, n'hésitez pas à mettre à jour le vôtre. 🙂Je ne sais pas quelle version vous utilisez. Depuis 1.10.2, il y a un
wsgi_request
attribut dansresponse
, il sert derequest
objet de votre point de vue.Il est donc très facile d'accès de l'utilisateur connecté:
Vous pouvez connectez-vous avec un test utilisateur comme suit:
Maintenant, vous pouvez simplement utiliser
user
dans vos tests:self.assertEqual(created_model_object.user, user)