Тестирование пользовательского бэкенда 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 вызов.