简体   繁体   中英

AttributeError: 'TestPoll' object has no attribute 'factory', django rest framework, tests

I'm currently working through the django api book to learn django rest framework in a virtualenv. I'm using python=3.6, django=2.2.5 and djangorestframework=3.10.3. I'm on the Testing and Continous Integration chapter which is chapter-8. I'm trying to write the first test on there that is:

from rest_framework.test import APITestCase
from rest_framework.test import APIRequestFactory

from polls import apiviews

# Create your tests here.


class TestPoll(APITestCase):

    def setup(self):
        self.factory = APIRequestFactory()
        self.view = apiviews.PollViewSet.as_view({'get': 'list'})
        self.uri = '/polls/'

    def test_list(self):
        request = self.factory.get(self.uri)
        response = self.view(request)
        self.assertEqual(response.status_code, 200, 'Expected Response Code 200, received {0} instead'.format(response.status_code))

but whenever I run it using python manage.py test it returns with the following error:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_list (polls.tests.TestPoll)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/vscodeworkspace/official_django/polls/polls/tests.py", line 17, in test_list
    request = self.factory.get(self.uri)
AttributeError: 'TestPoll' object has no attribute 'factory'

----------------------------------------------------------------------
Ran 1 test in 0.006s

FAILED (errors=1)
Destroying test database for alias 'default'...

I can clearly see the factory attribute and how it's called/accessed. I've tried to access the request and response attributes using self but that has no effect. So what is the problem?

您的设置方法应称为setUp

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM