2016-11-04 52 views
0

我试图在测试中声明一个语句引发这个异常,但它似乎不可能导入所述异常。这不,例如工作:如何assertRaises django.contrib.auth.models.DoesNotExist异常?

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': '[email protected]', 'password': 'testpassword'} 
     user = create_user('joao', 'testpassword', '[email protected]') 
     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': '[email protected]', 'password': 'tsubasaolivesr'} 
     response = self.client.post(url, data, format='json')  
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) 
     data = {'email': '[email protected]', 'password': 'tsubasaolivesr'} 
     self.assertRaises(models.DoesNotExist, self.client.post(url, data, format='json')) 

测试失败抱怨例外django.auth.contrib.auth.models.DoesNotExist被调用,即使我明确我断言它是应该发生的。

+0

如果将'self.assertRaises(models.DoesNotExist,')更改为'self.assertRaises(DoesNotExist,'? – BorrajaX

回答

0

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

所以,如果你真的没有捕捉到这个异常,你可以检查帖子的结果是否有状态500;否则,您需要检查您向用户显示的模型不存在的任何消息。

+0

但是由于在服务器中引发异常,测试立即失败。希望收到500_BAD_REQUEST回复,由于服务器中的异常,测试将失败 – DeusImoral

+1

也许您应该在运行测试时显示您收到的回溯。 –