Тестирование пользовательского бэкенда auth с помощью Django RestFramework

Я создал пользовательский бэкэнд аутентификации для своего приложения DRF. Я не могу понять, как его протестировать. Вызов client.post вызывает мою функцию authenticate (потому что она находится в моем представлении). Но мне нужно высмеять внутренний метод в моей ModelBackend.

Кинда в замешательстве, как это сделать?

Вид:

class Web3UserToken(APIView):
    authentication_classes = []
    permission_classes = []

    def post(self, request, **kwargs):
        public_address =  request.data["public_address"]
        web3 = Web3Backend()
        user, token = web3.authenticate(request)
        if token:
            return JsonResponse({'token': token})
        else:
            return Response({'message': 'Missing token'}, status=400)

Тест:

class TestWeb3AuthBackend(APITestCase): def setUp(self): #TODO: установить тестового пользователя self.client = APIClient() #self.factory = APIRequestFactory()

    def test_authenticatepasseswithexistinguser(self):
        self.user = Web3User(public_address=TEST_PUBLIC_ADDRESS)
        auth_backend = Web3Backend()
        import ipdb; ipdb.sset_trace()
        request = self.client.post('/api/token/', {'public_address': TEST_PUBLIC_ADDRESS, 'nonce': '0xsomething_random'},follow=True)
        with mock.patch.object(auth_backend, '_check_nonce', return_value=True) as method:
            token, user = auth_backend.authenticate(request)
        self.assertTrue(token)
        self.assertTrue(user)

Предлагаю использовать RequestFactory для создания запроса и передачи его в метод authenticate, вместо отправки запроса через тестовый клиент Django. Это модульный тест и его цель - проверить метод authenticate из Web3Backend. Вам не нужно тестировать эту функциональность через api вызов.

Вернуться на верх