Как выполнить модульный тестовый запрос для нескольких флажков с одинаковым именем в webapp2

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

Вопрос

Используя 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()?

Это было полезно?

Решение

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

vote=Better&vote=Faster&vote=Stronger

Однако в Python есть библиотечные функции, которые сделают это за вас:

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

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

Другие советы

Библиотека WebTest полезна для этих тестовых случаев.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top