【问题标题】:How can I test function with request.is_ajax() and request.method=='POST' in Django using unittest?如何使用 unittest 在 Django 中使用 request.is_ajax() 和 request.method=='POST' 测试函数?
【发布时间】:2020-02-10 10:16:45
【问题描述】:

我有下一个功能

    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(...)

【问题讨论】:

    标签: python django unit-testing django-unittest


    【解决方案1】:

    最简单的方法是使用 unittest 中的 Client 并调用解析为您的函数的 enpoint。 is_ajax() 方法只检查 HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' 标头是否在请求中。所以你可以将它添加到测试请求中。

    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})
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      相关资源
      最近更新 更多