Comment faire une demande de poste de test unitaire pour plusieurs cases avec le même nom sous webapp2
-
26-10-2019 - |
Question
Utilisation webapp2 créer des tests unitaires pour une forme où il y a des cases à cocher pour voix si plusieurs valeurs peuvent être affichées pour le champ vote
et ils sont récupérés par request.POST.getall('vote')
:
<input type="checkbox" name="vote" value="Better">
<input type="checkbox" name="vote" value="Faster">
<input type="checkbox" name="vote" value="Stronger">
Dans le test unitaire j'ai essayé passer une liste:
response = app.get_response('/vote',
POST={'vote': [u'Better', u'Faster', u'Stronger']},
headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)
On dirait que c'est simplement converti en chaîne:
votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]
Comment puis-je transmettre plusieurs valeurs pour vote
qui sera récupéré comme une liste via request.POST.getall()
?
La solution
POST données est codé en utilisant le codage de la chaîne de requête, et plusieurs articles du même nom sont représentés en répétant la clé avec des valeurs différentes. Par exemple:
vote=Better&vote=Faster&vote=Stronger
Python a des fonctions de bibliothèque pour le faire pour vous, si:
urllib.urlencode({
'vote': ['Better', 'Faster', 'Stronger'],
}, True)
Le second argument (True
) à urlencode
est appelé 'doseq', et charge urlencode à des séquences de codage sous forme de listes d'éléments séparés.
Autres conseils
La bibliothèque webtest est utile pour ces cas de test.
http://webtest.pythonpaste.org/en/latest/ index.html # forme soumissions