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