2016-04-18 3 views
1

私は安らかなエンドポイントを作成するためにdjango tastypieを使用しています。だから、ログインエンドポイントを作る時間です(まだ完了していません)。assertRaises BadRequestが機能していません

アカウント/ API/resources.py

class UserResource(ModelResource): 
    class Meta: 
     queryset = User.objects.all() 
     allowed_methods = ['post'] 
     serializer = Serializer(formats=['json']) 

    def prepend_urls(self, *args, **kwargs): 
     return [ 
      url(r'^(?P<resource_name>%s)/login/$' % self._meta.resource_name, 
       self.wrap_view('dispatch_login'), name='api_dispatch_login') 
     ] 

    def dispatch_login(self, request, **kwargs): 
     self.method_check(request, allowed=['post']) 

     data = self._meta.serializer.from_json(request.body) # This raises the exception. 

     return self.create_response(request, {}, status=200) 

アカウント/ tests.py

class UserApiTestCase(TestCase): 
    def setUp(self): 
     self.uri = reverse('api_dispatch_login', kwargs={'api_name': 'v1', 
          'resource_name': 'user'}) 

    def test_login_user_credentials_sent_in_body_request(self): 
     with self.assertRaises(BadRequest): 
      self.client.post(self.uri, content_type='application/json') 

端末エミュレータとカールを使用してWebサービスを消費することで、私が見ることができます例外が発生します。

$ curl localhost:8000/api/v1/user/login/ --request POST 
{"error": "Request is not valid JSON."} 

しかし、テストの実行中は、アサーションは失敗します。

FAIL: test_login_user_credentials_sent_in_body_request (accounts.tests.UserApiTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/slackmart/code/superproject/accounts/tests.py", line 29, in test_login_user_credentials_sent_in_body_request 
    self.client.post(self.uri, content_type='application/json') 
AssertionError: BadRequest not raised 

答えて

0

https://github.com/django-tastypie/django-tastypie/blob/master/docs/release_notes/dev.rst

追加さUnsupportedSerializationFormatそれぞれ UnsupportedDeserializationFormatキャッチとHttpNotAcceptableで 結果れる例外、(406の状態)とHttpUnsupportedMediaType (415のステータス)応答。以前は、これらの同じタイプの エラーが400のBadRequestエラーとして表示されていました。

最近のTastypieの変更により、HTTP準拠とエラーコードがより具体化されています。 400の代わりに406または415のステータスコードを探したい場合があります。