Le problème a été résolu grâce à Thaian, en ajoutant un login au début de la fonction « test_create », comme vous devez être connecté sur ce site pour utiliser le CreateViewdonnées post client test Django
Je suis en train d'écrire un test pour un createview et je suis incapable de publier des données.
L'objet mis à l'essai 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 ce qui suit (générique) vue
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'assertion qui lance l'erreur est la requête 'get' à la fin.
DoesNotExist: Role matching query does not exist.
Ainsi, l'objet n'est pas créé, mais le test ne valide la vue 302, ce qui signifie un poste est fait. Je ne comprends pas pourquoi ce test ne fait pas ce qu'il devrait faire. Quelqu'un pourrait-il m'aider?
=====
Après Thaians suggestions que 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/
Nous vous remercions pour votre message, pdb a donné les sorties variables suivantes: réponse: Variez: Cookie Content-Length: 0 Content-Type: text/html; charset = utf-8 Lieu:/comptes/login/next =/mon/rôle/créer/ client:>< méthode liée Client.post de > –
Jasper
@Jasper ajouter en première ligne dans test_create autorisation de la force par exemple: 'self.client.force_login (self.user)' peut-être résoudre ce problème votre problème si seuls les utilisateurs authentifiés peuvent créer un nouveau rôle. [django force_login] (https://docs.djangoproject.com/fr/1.11/topics/testing/tools/#django.test.Client.force_login) – Thaian
Cela a résolu mon problème! J'ai complètement oublié d'ajouter un identifiant pour l'utilisateur. (Une erreur rendue encore pire par le fait que je l'ai ajouté sur toutes les autres fonctions, doh) Un grand merci pour votre aide! – Jasper