Come unità di test richiesta Inserisci per più caselle di controllo con lo stesso nome sotto webapp2
-
26-10-2019 - |
Domanda
Utilizzando webapp2 creo unit test per un modulo dove ci sono caselle di controllo per i voti valori in modo più possono essere inviati per il campo vote
e vengono recuperati tramite 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">
Nel test di unità Ho provato a passare un elenco:
response = app.get_response('/vote',
POST={'vote': [u'Better', u'Faster', u'Stronger']},
headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)
Ma sembra che sia semplicemente convertiti in una stringa:
votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]
Come posso passare più valori per vote
che saranno recuperate in un elenco tramite request.POST.getall()
?
Soluzione
??POST viene codificato utilizzando la codifica stringa di query, e più elementi con lo stesso nome sono rappresentati ripetendo la chiave con valori diversi. Per esempio:
vote=Better&vote=Faster&vote=Stronger
Python ha funzioni di libreria per fare questo per voi, però:
urllib.urlencode({
'vote': ['Better', 'Faster', 'Stronger'],
}, True)
Il secondo argomento (True
) per urlencode
è chiamato 'doseq', e istruisce urlencode alle sequenze codificano gli elenchi di elementi separati.
Altri suggerimenti
La biblioteca webtest è utile per questi casi di test.
http://webtest.pythonpaste.org/en/latest/ index.html # form-osservazioni