тест для API после получения кода состояния 200 вместо 201 - PullRequest
1 голос
/ 10 марта 2019

Мой тест для моего метода записи API получил код состояния 200, но в 201 я попытался найти проблему, но не смог. Было бы проще, если бы я получил статус ошибки 4xx, но я понятия не имею, почему метод post мог получить код 200. Мое представление API работает нормально, поэтому это должно быть проблемой с тестовым кодом, но я действительно не знаю, что может вызвать эту проблему , Может быть, я ошибаюсь и код состояния 200 в порядке, но я думаю, что метод post должен получить статус 201.

test_api.py

def test_post_logged_in(self):
    product = Product.objects.get(id=1)
    self.client.login(username='test', password='test123')
    data = {
        'nick': self.user.id,
        'rate': '1/5',
        'content': 'here is comment',
        'product': product.id
    }
    response = self.client.post(reverse('add_comments', kwargs={'id': product.id}), data, format='json')
    self.assertEqual(response.status_code, 201, f'expected Response code 201, instead get {response.status_code}')

views.py

class CreateComment(APIView):

def get_object(self, id):
    try:
        return Product.objects.get(id=id)
    except Product.DoesNotExist:
        raise Http404

def get(self,request,  id):
    product = self.get_object(id)
    serializer = ProductSerializer(product)
    return Response(serializer.data)

def post(self, request,id):
    serializer = CommentSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save(nick=request.user, product=self.get_object(id))
        return Response(serializer.data)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

2 голосов
/ 11 марта 2019

В вашем post() вам нужно вернуть status.HTTP_201_CREATED в случае успеха.

Попробуйте это:

def post(self, request,id):
    serializer = CommentSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save(nick=request.user, product=self.get_object(id))
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...