Django 测试 - 测试处理 ajax 调用的视图

Gen*_*e9y 2 testing django ajax

在测试 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)
Run Code Online (Sandbox Code Playgroud)

在测试.py中

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

看起来它没有通过 request.is_ajax().. 如何在 Django 测试中模拟 ajax 调用?

Dan*_*man 5

测试客户端上的文档提到了这一点;您需要传递 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'
)
Run Code Online (Sandbox Code Playgroud)