2016-11-04 15 views
0

私はこの声明がこの例外を提起することをテストで宣言しようとしていますが、その例外をインポートすることは不可能であるようです。これは、例えば動作しません:アサートする方法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

おそらく、テストの実行時に受け取ったトレースバックを表示する必要があります。 –

関連する問題