【问题标题】:Error when using Django Rest Framework's APITestCase使用 Django Rest Framework 的 APITestCase 时出错
【发布时间】:2014-03-06 19:47:11
【问题描述】:

我正在尝试为我的 Django-Rest-Framework API 运行一些测试,但遇到了一个错误。当我运行以下测试时,我收到以下错误。

Traceback (most recent call last):
  File "C:\Users\Bill\SD\DjangoApps\vidapp\startapp\tests.py", line 21, in test_get_user
    response = self.client.get('/user/1/')
  File "C:\Anaconda\lib\site-packages\django\test\client.py", line 473, in get
    response = super(Client, self).get(path, data=data, **extra)
  File "C:\Anaconda\lib\site-packages\django\test\client.py", line 280, in get
    return self.request(**r)
  File "C:\Anaconda\lib\site-packages\rest_framework\test.py", line 143, in request
    return super(APIClient, self).request(**kwargs)
  File "C:\Anaconda\lib\site-packages\rest_framework\test.py", line 95, in request
    request = super(APIRequestFactory, self).request(**kwargs)
  File "C:\Anaconda\lib\site-packages\django\test\client.py", line 444, in request
    six.reraise(*exc_info)
  File "C:\Anaconda\lib\site-packages\django\core\handlers\base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: __init__() takes exactly 1 argument (2 given)

测试用例:

class UserTestCase(APITestCase):
    def setUp(self):
        helper.reset_test_db()

    def test_get_user(self):
        response = self.client.get('/user/1/')
        print response.content
        self.assertEqual(response.data, {'fname':'Generic','lname':'Name','token':'token1'})

网址配置:

url(r'^user/new/$', 'startapp.views.new_user'),
url(r'^user/1/$', 'startapp.views.get_1'),

观看次数:

class get_1(APIView):
    def get(self, request):
        user = db_models.User.objects.get(pk=1)
        if(user is not None):
            serial_user = serial.UserSerializer(user)
            return Response(serial_user.data)
        else:
            return Response(status.HTTP_404_NOT_FOUND)

我知道视图本身有效,因为我单独测试了它。数据肯定存在,因为 helper.reset_test_db() 把它放在那里(我知道我应该使用固定装置,但这是为了测试,所以我选择了简单的路线)。对于 POST 和其他命令,或者当我使用 Django 的 TestCase 而不是 APITestCase 时,也会出现同样的错误。虽然这是我第一次使用 Django 的 TestCase,但我阅读了 Django 和 Django 其余文档,但似乎无法弄清楚这个问题。

【问题讨论】:

  • 您使用哪个 DRF 版本?
  • DRF 为 2.3.12。我使用了 pip install 所以我认为这是最新版本。如果任何其他信息有用,我将使用 django 1.6.2 和 python 2.7.5 :: Anaconda 1.7.0。
  • @DenisCornehl DRF 是 2.3.12。我使用了 pip install 所以我认为这是最新版本。如果任何其他信息有用,我将使用 django 1.6.2 和 python 2.7.5 :: Anaconda 1.7.0。

标签: python django django-rest-framework


【解决方案1】:

您的视图是基于类的视图。

所以你必须用as_view将它添加到urlconfig中:

url(r'^user/1/$', startapp.views.get_1.as_view()),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多