Come unità di test richiesta Inserisci per più caselle di controllo con lo stesso nome sotto webapp2

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

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

È stato utile?

Soluzione

dati

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top