Hej. Mam taki problem:
Struktura mojego kodu wygląda mniej więcej tak:
./project/app_1/ -> tests.py, views.py, serializers.py [..]
./project/site/settings.py itd
./project/manage.py
Używam DRF i próbuję przetestować widok który korzysta z serializera. W serializerze mam metodę ktora dobija się do zewnętrznego API, żeby zwalidować jedno z pól. Na cele testu widoku, chciałbym zamokować tą metodę oczywiście (żeby test był niezależny od API chociażby). Testy robię korzystając z django.test.TestCase
Próbowałem:
# tests.py
from .serializers import MySerializer
@patch.object(MySerializer, "_method_to_mock", return_value=[])
def test_foo_bar(self, mocked_method):
. ...
# tests.py
@patch("app_1.serializers.MySerializer._method_to_mock", return_value=[])
def test_foo_bar(self, mocked_method):
. ...
# tests.py
from . import views
@patch.object(views.MySerializer, "_method_to_mock", return_value=[]) # Bo MySerializer jest importowany w views
def test_foo_bar(self, mocked_method):
. ...
Próbowałem też te same bajery z kontekst managerem i dopiero wtedy self.client.post
wywoływać w TestCase.
Zastanawiam się co robię źle i w którym miejscu to mokować? Jak to powinno wyglądać?
Z góry dzięki za dobre rady:) Ja chwilowo wymiękłem