Django DRF - jak zamokować metodę serializera?

0

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

0

@mock.patch("app_1.serializers.MySerializer._method_to_mock")
To na pewno Ci nie działa? Swoją drogą to lepiej byłoby chyba zmockować jakiś wrapper, który łączy się z api a nie metodę, która validuje bo w ten sposób jej nie przetestujesz

i spróbuj
@mock.patch("app_1.views.MySerializer._method_to_mock")

0

Dobra, chyba coś spierdzieliłem xD całkiem możliwe, że patrzyłem na break pointa po teście który nie miał tego zamokowanego :D

anonimowy napisał(a):

Swoją drogą to lepiej byłoby chyba zmockować jakiś wrapper, który łączy się z api a nie metodę, która validuje bo w ten sposób jej nie przetestujesz

ta metoda to jest wrapper na api zewnętrzne właśnie

EDIT: no chyba, że nie zrozumiałem o co Ci chodziło @anonimowy . (?)

1 użytkowników online, w tym zalogowanych: 0, gości: 1