/ / Django test client post data - django, post, django-testing

Django test client post data - django, post, django-testing

Le problème a été résolu grâce à Thaian, en ajoutant une connexion au début de la fonction "test_create", car vous devez être connecté sur ce site pour utiliser le createview

J'écris actuellement un test pour un createview et je ne peux pas y poster de données.

L'objet testé a le modèle suivant

class Role(models.Model):
name = models.CharField(max_length=255)
linked_tenant = models.ForeignKey(Tenant, blank=True, null=True)

Et est utilisé dans la vue (générique) suivante

class RolCreate(TenantRootedMixin, CreateView):
model = RolTemplate
form_class = RoleForm

def get_form_kwargs(self):
kwargs = super(RolCreate, self).get_form_kwargs()
kwargs["linked_tenant"] = self.request.tenant
return kwargs

def form_valid(self, form):
form.instance.linked_tenant = self.kwargs.get("tenant")
return super(RolCreate, self).form_valid(form)

def get_success_url(self, **kwargs):
return reverse("rol_list", args=[self.request.tenant.slug])

Et c'est le test que j'utilise.

class RolCreate_tests(TestCase):

def setUp(self):
self.tenant = get_tenant()
self.role = get_role(self.tenant)
self.client = Client(HTTP_HOST="tc.tc:8000")
self.user = get_user(self.tenant)

def test_create(self):

response = self.client.post(reverse("rolcreate"), {"name" : "new_object"})
self.assertEqual(response.status_code, 302)
test_against = Role.objects.get(name="new_object")
self.assertEqual(test_against, self.tenant)

L'affirmation qui renvoie l'erreur est la requête "get" à la fin.

DoesNotExist: Role matching query does not exist.

Donc, l'objet n'est pas créé, mais le test valide la vue 302, ce qui signifie qu'un post est en cours. Je ne comprends pas pourquoi ce test ne fait pas ce qu'il devrait. Quelqu'un pourrait-il m'aider ici?

=====

Après les suggestions de Thaians, j'ai obtenu les valeurs suivantes:

(Pdb) print(self.client.post)
<bound method Client.post of <django.test.client.Client object at     0x10f20da50>>

Pdb) response
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/accounts/login/?next=/my/role/create/">
(Pdb) print(response)
Vary: Cookie
Content-Length: 0
Content-Type: text/html; charset=utf-8
Location: /accounts/login/?next=/my/role/create/

Réponses:

2 pour la réponse № 1

Avez-vous imprimé la réponse et vérifié ce retour peut-être?

La bonne idée est d'exécuter des tests avec PDB.

def test_create(self):

response = self.client.post(reverse("rolcreate"), {"name" : "new_object"})
import pdb; pdb.set_trace()
self.assertEqual(response.status_code, 302)
test_against = Role.objects.get(name="new_object")
self.assertEqual(test_against, self.tenant)

ajoutez import pdb; pdb.set_trace () dans votre test, puis cochez self.client.post ().

Veuillez donc coller ce que contient la réponse.