Cómo probar la solicitud POST Solicitud de múltiples casillas de verificación con el mismo nombre en WebApp2
-
26-10-2019 - |
Pregunta
Uso de WebApp2 creo pruebas unitarias para un formulario donde hay casillas de verificación para votos para que se puedan publicar múltiples valores para el vote
campo y se recuperan a través de 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">
En la prueba unitaria intenté pasar una lista:
response = app.get_response('/vote',
POST={'vote': [u'Better', u'Faster', u'Stronger']},
headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)
Pero parece que simplemente se convierte en una cadena:
votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]
¿Cómo puedo pasar múltiples valores para vote
que se recuperará como una lista a través de request.POST.getall()
?
Solución
Los datos de la publicación se codifican utilizando la codificación de cadena de consulta, y varios elementos por el mismo nombre se representan repitiendo la clave con diferentes valores. Por ejemplo:
vote=Better&vote=Faster&vote=Stronger
Sin embargo, Python tiene funciones de biblioteca para hacer esto por usted:
urllib.urlencode({
'vote': ['Better', 'Faster', 'Stronger'],
}, True)
El segundo argumento (True
) a urlencode
se llama 'doseq' e indica a Urlencode que codifique secuencias como listas de elementos separados.
Otros consejos
La biblioteca Webtest es útil para estos casos de prueba.
http://webtest.pythonpaste.org/en/latest/index.html#form-submissions