Comment faire une demande de poste de test unitaire pour plusieurs cases avec le même nom sous webapp2

StackOverflow https://stackoverflow.com/questions/7313124

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()?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top