Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django REST测试忽略工厂';s网址_Django_Unit Testing_Testing_Django Rest Framework - Fatal编程技术网

Django REST测试忽略工厂';s网址

Django REST测试忽略工厂';s网址,django,unit-testing,testing,django-rest-framework,Django,Unit Testing,Testing,Django Rest Framework,我在为Django REST视图编写APITestCase时遇到了一个奇怪的错误 这是我的代码: class CreateUserTest(APITestCase): def setup(self): self.superuser = User.objects.create_superuser('vishnu@vishnu.com', '1989-10-06', 'vishnupassword') self.client.login(username='v

我在为Django REST视图编写APITestCase时遇到了一个奇怪的错误

这是我的代码:

class CreateUserTest(APITestCase):
    def setup(self):
        self.superuser = User.objects.create_superuser('vishnu@vishnu.com', '1989-10-06', 'vishnupassword')
        self.client.login(username='vishnu', password='vishnupassword')
        self.data = a bunch of trivial data

    def test_can_create_user(self):
        print "create user"
        self.setup()
        self.token = Token.objects.get(user_id=self.superuser.id)
        self.api_key = settings.API_KEY
        self.factory = APIRequestFactory()
        self.request = self.factory.post('/api/v1/uaaaaaasers/?api_key=%s' % self.api_key,
                                    self.data,
                                    HTTP_AUTHORIZATION='Token {}'.format(self.token))
        force_authenticate(self.request, user=self.superuser)
        self.view = UserList.as_view()
        self.response = self.view(self.request)
        self.response.render()
        #print self.response.content
        self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)
如您所见,我运行了一个factory.post,指向一个故意错误的url/api/v1/UAAAASERS/

但测试并没有抱怨:

Creating test database for alias 'default'... 
create user .
---------------------------------------------------------------------- 

Ran 1 test in 0.199s

OK Destroying test database for alias 'default'...

它不应该因为错误的url而崩溃吗?如何知道测试是否正常?

如果要测试将请求发布到无效url,请使用而不是请求工厂

class CreateUserTest(APITestCase):

    def test_can_create_user(self):
       ...
       response = self.client.post(
           '/api/v1/uaaaaaasers/?api_key=%s' % self.api_key,
           self.data,
           ...
       )
       ...

如果要测试将请求发布到无效url,请使用而不是请求工厂

class CreateUserTest(APITestCase):

    def test_can_create_user(self):
       ...
       response = self.client.post(
           '/api/v1/uaaaaaasers/?api_key=%s' % self.api_key,
           self.data,
           ...
       )
       ...

你测试的都是错的。。。 您测试的响应来自direct view调用

self.view = UserList.as_view()
self.response = self.view(self.request)
self.response.render()
    #print self.response.content
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)
您的上述案例将始终称为视图

在实际的测试用例中,我们使用客户端点击URL并测试该响应

self.response = self.client.post('/api/v1/uaaaaaasers/?api_key=%s' % self.api_key,
                                self.data,
                                HTTP_AUTHORIZATION='Token {}'.format(self.token))
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)

你测试的都是错的。。。 您测试的响应来自direct view调用

self.view = UserList.as_view()
self.response = self.view(self.request)
self.response.render()
    #print self.response.content
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)
您的上述案例将始终称为视图

在实际的测试用例中,我们使用客户端点击URL并测试该响应

self.response = self.client.post('/api/v1/uaaaaaasers/?api_key=%s' % self.api_key,
                                self.data,
                                HTTP_AUTHORIZATION='Token {}'.format(self.token))
self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)

嗯,我在这里感到困惑,例如,我怎么知道我在所有的测试中没有拼写错我的URL?我不能依靠工厂吗?或者,在django rest中测试api视图的最佳实践是什么?如果您使用请求工厂,那么您就是在测试该视图。您没有测试您的url模式是否配置了正确的视图。使用测试客户端模拟对特定url的请求,测试url配置也是如此。请求工厂为您提供了更多的控制,但很多时候这是不必要的,而且使用测试客户机更容易。嗯,我在这里感到困惑,例如,我怎么知道我在所有测试中没有拼写错URL?我不能依靠工厂吗?或者,在django rest中测试api视图的最佳实践是什么?如果您使用请求工厂,那么您就是在测试该视图。您没有测试您的url模式是否配置了正确的视图。使用测试客户端模拟对特定url的请求,测试url配置也是如此。请求工厂为您提供了更多的控制,但很多时候这并不是必需的,而且使用测试客户端更容易。在您的示例中,您从哪里获得self.response?@lapinkoira更新如上:)。。。上面代码中的问题只是django没有将url映射到视图。。。您正在手动调用视图:)在您的示例中,self.response是从哪里获得的?@lapinkoira更新如上:)。。。上面代码中的问题只是django没有将url映射到视图。。。您正在手动调用视图:)