如何在Django Rest框架测试中强制_认证

2024-04-28 11:55:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在测试DRF教程中内置的API时遇到问题:https://www.django-rest-framework.org/tutorial/1-serialization/

我认为:

class SnippetList(generics.ListCreateAPIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

和用于测试该视图的测试类:

class SnippetsList(APITestCase):
    def setUp(self):
        self.user = User.objects.create_superuser(username='testowy', password='test')
        self.client = APIClient()
        Snippet.objects.create(code="print('hello')", owner=self.user)
        Snippet.objects.create(code="print('world')", owner=self.user)
        self.payload = {
            "code": "print(edit)"
        }

    def test_get_snippets_list(self):
        response = self.client.get(reverse('snippet_list'))
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        self.assertEqual(response.data, serializer.data)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

    def test_post_snippets_list(self):
        self.client.force_authenticate(self.user)
        response = self.client.post(reverse('snippet_list'), json.dumps(self.payload), format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

当我使用python manage.py test运行测试时,第一个测试(对于get方法)通过,但第二个测试得到以下输出:

    self.assertEqual(response.status_code, status.HTTP_201_CREATED) AssertionError: 400 != 201

在登录后的手动测试中,一切正常,有人知道我在这里遗漏了什么吗


Tags: testselfclientobjectsresponsedefstatuscreate