Как проверить представление, используя объект запроса - PullRequest
0 голосов
/ 21 января 2019

Мне нужно сделать тесты, чтобы проверить, правильно ли работает мой вид. Однако я не нашел, как использовать объект запроса в тестовом файле.

Моя функция просмотра:

def track_view(request):
    user_email, user_order = request.session['email'], request.session['order']
    if request.method == 'POST':
        client_id = request.META.get('HTTP_HOST').split(':8000')[0]
        payload = "{ \n\"description\": \"Rastreio de pedido\", \n\"subject\": \"Rastreamento " + user_order + ' ' + user_email + "\", \n\"email\": \"" + user_email + "\", \n\"priority\": " + str(
            priority['low']) + ", \n\"status\": " + str(status['closed']) + ", \n\"group_id\": " + str(group[
                                                                                                          'Logística']) + ", \n\"type\": \"Rastrear Pedido\", \n\"product_id\": " + str(client[client_id]) + "}"
        headers = {
            'Content-Type': "application/json",
            'Cache-Control': "no-cache"
        }

        response = requests.request("POST", url, data=payload, headers=headers, auth=('XXX', 'X'))

        print(response.text)
        context = {'email_variable': user_email,
                   'order_variable': user_order}
        return redirect('atendimento:final_view')
    logo_image = 'client_logo/' + request.META.get('HTTP_HOST').split(':8000')[0] + '.png'
    context = {'logo_image': logo_image,
               'user_email': request.POST.get('email'),
               'user_order': request.session['order']}
    return render(request, 'atendimento/track_page.html', context)

Как я могу заставить это работать, чтобы проверить различные входные данные для этого представления?

1 Ответ

0 голосов
/ 21 января 2019

Вы должны использовать тестовый клиент для тестирования запросов.

def test_track_view(self):
    session = self.client.session
    session['email'] = 'foo@bar.com'
    session['user_order'] = 'whatever'
    url = reverse('my-url')
    response = self.client.get(url)
    self.assertEqual(response.status_code, 200)

Обратите внимание, вы, вероятно, также захотите смоделировать объект запросов, чтобы ваши тесты на самом деле не выполнялись.сделайте запрос к внешнему API.

Также обратите внимание, что на самом деле не рекомендуется создавать строки JSON вручную.Вместо этого создайте dict и поместите его в JSON:

payload = { "description": "Rastreio de pedido", ... "priority": priority['low'], "status": status['closed'], "group_id": group['Logística']...}
response = requests.request("POST", url, data=json.dumps(payload), headers=headers, auth=('XXX', 'X'))
...