Как выполнить модульное тестирование после запроса для нескольких флажков с одинаковым именем в webapp2 - PullRequest
4 голосов
/ 06 сентября 2011

Используя webapp2, я создаю модульные тесты для формы, в которой есть флажки для голосов, чтобы можно было разместить несколько значений для поля vote и получить их через 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">

В модульном тесте я попытался передать список:

response = app.get_response('/vote',
  POST={'vote': [u'Better', u'Faster', u'Stronger']},
  headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)

Но похоже, что он просто конвертируется в строку:

votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]

Как передать несколько значений для vote, которые будут получены в виде списка через request.POST.getall()?

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

Данные POST кодируются с использованием кодировки строки запроса, и несколько элементов с одним и тем же именем представляются путем повторения ключа с разными значениями. Например:

vote=Better&vote=Faster&vote=Stronger

Python имеет библиотечные функции, чтобы сделать это для вас, хотя:

urllib.urlencode({
  'vote': ['Better', 'Faster', 'Stronger'],
}, True)

Второй аргумент (True) для urlencode называется 'дозаq' и дает команду urlencode кодировать последовательности как списки отдельных элементов.

1 голос
/ 06 сентября 2011

Библиотека веб-тестов полезна для этих тестов.

http://webtest.pythonpaste.org/en/latest/index.html#form-submissions

...