如何断言一个django.contrib.auth.models.DoesNotExist异常?

时间:2016-11-04 18:37:46

标签: python django

我试图在测试中声明一个语句引发了这个异常,但似乎无法导入所述异常。例如,这不起作用:

from rest_framework.test import APITestCase
from rest_framework.test import APIRequestFactory
from CarPooling.views import login, logout
from django.urls import reverse
from django.contrib.auth.models import User, UserManager
from django.contrib.auth import authenticate
from rest_framework.authtoken.models import Token
from CarPooling.models import AccountActivationToken
from rest_framework import status
from django.contrib.auth.models import DoesNotExist

class LoginViewTests(APITestCase):
    def test_login(self):
        url = '/api/token/'
        data = {'email': 'up20@fe.up.pt', 'password': 'testpassword'}
        user = create_user('joao', 'testpassword', 'up20@fe.up.pt')
        user = User.objects.get()
        user.is_active = True
        user.save()                     
        response = self.client.post(url, data, format='json')       
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['token'], Token.objects.get(user=user).key)
        data = {'email': 'up20@fe.up.pt', 'password': 'tsubasaolivesr'}
        response = self.client.post(url, data, format='json')       
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        data = {'email': 'up20@fe.up.pt', 'password': 'tsubasaolivesr'}
        self.assertRaises(models.DoesNotExist, self.client.post(url, data, format='json'))

测试失败抱怨异常django.auth.contrib.auth.models.DoesNotExist被调用,即使我明确声明它应该发生。

1 个答案:

答案 0 :(得分:0)

您在错误的级别进行测试。使用客户端发布到视图永远不会引发Django异常;即使你的视图本身没有捕获到这个异常,它几乎可以肯定,它肯定会被Django错误中间件捕获,并作为500错误呈现给客户端。

因此,如果您真的没有抓住该异常,可以检查帖子的结果是否为状态500;否则,您需要检查您向用户显示的模型不存在的任何消息。