2016-11-04 27 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

也許您應該在運行測試時顯示您收到的回溯。 –

相關問題