猿问

覆盖率显示 Django 测试的百分比太低

我目前正在使用一些 api-unit-tests 测试我的 django (2.1.0) 应用程序。我使用 django rest 框架(3.9.0)来构建登录。为此,我使用这样的代码:


class LogoutTest(APITestCase):

    def test_login_post_unauth(self):

        response = requests.post('http://127.0.0.1:8000/myapp/user_info/')

        self.assertEqual(response.status_code, 401)


    def test_login_put_auth(self):

        token = auth()

        payload = {'Authorization': 'Token '+token}

        response = requests.put('http://127.0.0.1:8000/myapp/user_info/', headers=payload)

        self.assertEqual(response.status_code, 405)


    def test_login_delete_auth(self):

        token = auth()

        payload = {'Authorization': 'Token '+token}

        response = requests.delete('http://127.0.0.1:8000/myapp/user_info/', headers=payload)

        self.assertEqual(response.status_code, 405)

当我使用时,测试正在运行:


coverage run --source='.' manage.py test myapp


就像你看到的:


Creating test database for alias 'default'...

System check identified no issues (0 silenced).

....................................

----------------------------------------------------------------------

Ran 36 tests in 5.082s


OK

Destroying test database for alias 'default'...

但是当我做覆盖报告时,我只是得到


myapp/auth.py                         72     46    36%


尽管我的 api 测试使用了我的 auth.py 中的代码。我的 auth.py 看起来像这样:



    def logout(request):

        if request.method == 'GET':

            request.user.auth_token.delete()

            return JsonResponse({'message':'You are sucessfully logged out'}, status=200)

        return JsonResponse({'error': 'Other Methods than GET not allowed'}, status=405)


但报道说


return JsonResponse({'error': 'Other Methods than GET not allowed'}, status=405) will never be used.


你有想法吗?


青春有我
浏览 148回答 1
1回答

HUX布斯

我找到了答案。我写了错误的测试。Django 提供了他自己的测试工具,你应该使用它们!并且不要写一些带有请求的东西,因为覆盖率会在例如 auth.py 中将您的代码标识为未使用,因为您的测试不是使用 django 测试工具
随时随地看视频慕课网APP

相关分类

Python
我要回答