Cómo probar la solicitud POST Solicitud de múltiples casillas de verificación con el mismo nombre en WebApp2

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

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top