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

时间:2018-12-03 06:00:41

标签: ajax django testing

在测试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()。.如何在Django测试中模拟ajax调用?

2 个答案:

答案 0 :(得分:1)

不能完全确定这是否可以解决整个问题,但是您的方法可能期望使用json格式的数据:

<div class="hover_bkgr_fricc">
        <span class="helper"></span>
        <div>
        <div class="popupCloseButton">X</div>

        </div>
    </div>

答案 1 :(得分:1)

docs on the test client提到了这一点;您需要传递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'
)