assertRaises BadRequest不起作用

时间:2016-04-18 15:58:15

标签: django tastypie restful-architecture django-testing

我正在使用django tastypie来创建我的休息端点。所以现在是时候制作登录端点了(它尚未完成)。

帐户/ 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')

通过使用终端模拟器和curl来使用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

1 个答案:

答案 0 :(得分:0)

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

  

添加了UnsupportedSerializationFormat和   不受支持的DeserializationFormat异常,被捕获和   导致HttpNotAcceptable(406 status)和HttpUnsupportedMediaType   (415状态)响应,分别。以前这些相同的类型   错误已经出现400 BadRequest错误。

最近对Tastypie进行了更改,使其更符合HTTP标准,错误代码更具体。您需要查找406或415状态代码而不是400。