如何使用 unittest 在 Django 中使用 request.is_ajax() 和 request.method=='POST' 测试函数?
How can I test function with request.is_ajax() and request.method=='POST' in Django using unittest?
我有下一个功能
def edit_resolution_text_view(self, request):
if request.method == 'POST' and request.is_ajax():
resolution = request.POST.get('resolution')
donation_id = request.POST.get('donation')
result = Donation.objects.filter(pk=donation_id).\
update(resolution_note=resolution)
if not result:
return JsonResponse({'message': 'Error'})
return JsonResponse({'resolution': resolution})
return JsonResponse({'message': 'Error'})
如何使用 unittest
进行测试
此函数位于Django modelAdmin
。
我将实例定义为 self.donation_admin = DonationAdmin(model=Donation, admin_site=AdminSite())
并将函数调用为
self.donation_admin.edit_resolution_text_view(...)
最简单的方法是使用 unittest 中的 Client
并调用解析为您的函数的 enpoint。 is_ajax()
方法只是检查 HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' header 在请求中。所以你可以将它添加到测试请求中。
class TestEditResulutionTextView(unittest.TestCase):
def test_get(self):
response = self.client.get('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
self.assertEqual(response.json(), {'message': 'Error'})
def test_post(self):
expected_resolution = # put here what you are expecting
response = self.client.post('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
self.assertEqual(response.json(), {'resolution': expected_resolution})
我有下一个功能
def edit_resolution_text_view(self, request):
if request.method == 'POST' and request.is_ajax():
resolution = request.POST.get('resolution')
donation_id = request.POST.get('donation')
result = Donation.objects.filter(pk=donation_id).\
update(resolution_note=resolution)
if not result:
return JsonResponse({'message': 'Error'})
return JsonResponse({'resolution': resolution})
return JsonResponse({'message': 'Error'})
如何使用 unittest
此函数位于Django modelAdmin
。
我将实例定义为 self.donation_admin = DonationAdmin(model=Donation, admin_site=AdminSite())
并将函数调用为
self.donation_admin.edit_resolution_text_view(...)
最简单的方法是使用 unittest 中的 Client
并调用解析为您的函数的 enpoint。 is_ajax()
方法只是检查 HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' header 在请求中。所以你可以将它添加到测试请求中。
class TestEditResulutionTextView(unittest.TestCase):
def test_get(self):
response = self.client.get('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
self.assertEqual(response.json(), {'message': 'Error'})
def test_post(self):
expected_resolution = # put here what you are expecting
response = self.client.post('/url_to_my_view/', **{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
self.assertEqual(response.json(), {'resolution': expected_resolution})