Как протестировать вызывается ли функция из класса Django DRF APIView
Хочу реализовать слой сервисов в Django DRF. Пытаюсь написать тест, проверяющий, вызывается ли функция сервиса(создание автора) из класса. Посылаю пост запрос в тестах, но функция не отрабатывает, хотя получаю статус 201 о создании объекта.
views.py
class AuthorListApiView(APIView):
class InputSerializer(serializers.Serializer):
name = serializers.CharField()
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
create_author(**serializer.validated_data)
return Response(serializer.data, status=status.HTTP_201_CREATED)
services.py
def create_author(name: str) -> Author:
"""
Create a Author model object.
"""
author = Author(name=name)
author.full_clean()
author.save()
return author
test_view.py
@mock.patch('books.services.create_author')
def test_view_calls_service(self, service_mock):
self.post(self.url, data=self.data)
service_mock.assert_called_once_with(**self.data)
AssertionError:
AssertionError: Expected 'create_author' to be called once. Called 0 times.
На англоязычной версии сайта дали ответ. Патчить модуль нужно там где функция вызывается, а не там где определяется.
# test_view.py
class AuthorListApiViewTest(PlusTestCase):
@mock.patch('books.views.create_author')
def test_view_calls_service(self, service_mock):
...