Django testing - тестирование представления, обрабатывающего вызов ajax - PullRequest
0 голосов
/ 03 декабря 2018

При тестировании Django представление возвращает код 200, но не отправляет никаких сообщений об ошибках.

def ajax_view(request):
    msg = ''
    if request.is_ajax():
        username = request.POST['username']
        user = User.objects.get(username=username)
        msg = 'user exists'

    return HttpResponse(msg)

В tests.py

    response = self.client.post(reverse('ajax_view'), data={'username': 'hello'})       
    self.assertEqual(200, response.status_code)
    self.assertContains(response, 'exist')

Кажется, что он не проходит через request.is_ajax () .. Как я могу высмеять вызов ajax в тестировании Django?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Документы на тестовом клиенте упоминают об этом;вам нужно передать заголовок HTTP_X_REQUESTED_WITH, который вы можете сделать в качестве аргумента ключевого слова.

Также, если вы передадите content_type как application / json, Django автоматически сериализуется в JSON.Итак:

response = self.client.post(
    reverse('ajax_view'),
    data={'username': 'hello'},
    content_type='application/json',
    HTTP_X_REQUESTED_WITH='XMLHttpRequest'
)
0 голосов
/ 03 декабря 2018

Не совсем уверен, что это решит всю проблему, но ваш метод может ожидать данные в формате json:

json_data = json.dumps({'username': 'hello'})
response = self.client.post(reverse('ajax_view'), data=json_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...