2 votes

Tests unitaires de Django ; cases à cocher POST à valeurs multiples

J'essaie d'exécuter un test unitaire sur un formulaire comportant plusieurs cases à cocher, mais je n'arrive pas à trouver comment envoyer les données POST. La question la plus similaire que j'ai trouvée est la suivante aquí . Mais comment puis-je intégrer cette partie codée en url dans le POST avec les autres données du formulaire ?

Si je fais quelque chose comme ceci, mon test se trompe et dit classes = request.POST.getlist('class_choices') AttributeError : L'objet 'dict' n'a pas d'attribut 'getlist' :

    request = HttpRequest()
    request.method = 'POST'
    request.POST['fname'] = 'A'
    request.POST['lname'] = 'Student'
    request.POST['email'] = 'me@name.com'
    request.POST['class_choices'] = urllib.urlencode({
            'class_choices': ['1', '2'],
    }, True)
    request.POST['passwd'] = 'password'
    request.POST['conpasswd'] = 'password'
    response = success(request)
    self.assertIn('My Browser', response.content.decode())

Mais si je fais cela, j'obtiens une erreur sur fname = request.POST['fname'] TypeError : string indices must be integers, not str

    request.POST = urllib.urlencode({
            'class_choices': ['1', '2'],
            'fname': 'A',
            'lname': 'Student',
            'email': 'me@name.com',
            'passwd': 'password',
            'conpasswd': 'password'
    }, True)
    response = success(request)

3voto

user Points 2354

Après avoir essayé d'autres choses, je vais dire qu'il n'y a "techniquement" pas de réponse à ma question... Je n'ai trouvé aucun moyen de créer un argument POST de type checkbox en utilisant HttpRequest. Cependant, en procédant de la "bonne" façon avec le client de test de Django, comme l'a suggéré Hieu Nguyen, vous pouvez le faire. Il suffit d'encapsuler les multiples options dans des paranthèses, comme :

    response = c.post('/success/',{
        'fname': 'A',
        'lname': 'Student',
        'email': 'me@name.com',
        'passwd': 'password',
        'conpasswd': 'password',
        'class_choices': ('1','2'),
    })

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