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)

在测试中.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调用?

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

不完全确定这会解决整个问题,但您的方法可能需要json格式的数据:

json_data = json.dumps({'username': 'hello'})
response = self.client.post(reverse('ajax_view'), data=json_data)

最新更新