Получение ошибок при выполнении автоматизированного тестирования для моего DRF APi
Я выполняю несколько автоматизированных тестов на APIViews (конечные точки API) с DRF для моего Django проекта.
Проблема, с которой я столкнулся, заключается в том, что я не могу успешно запустить тесты с python manage.py test
.
Я уверен, что правильно настроил все для моих APIViews/тестов в соответствии с документацией DRF, однако я получаю ошибку трассировки, предполагающую, что что-то может быть не так с моим response = self.client.post(url, data, format='json')
в моем UserRegisterTests
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from ..models import User
class UserRegisterTests(APITestCase):
def test_register_user(self):
url = reverse('register')
data = {'email': 'myemail@mail.com', 'password': 'mypassword123'}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(User.objects.count(), 1)
self.assertEqual(User.objects.post().email, 'myemail@mail.com')
self.assertTrue(User.objects.check_password('mypassword1123'))
И, возможно, что-то не так с if serializer.is_valid():
в моем регистре APIView (views)
# API endpoint for registration
@authentication_classes([JWTAuthentication])
class RegisterView(APIView):
def post(self, request):
serializer = RegisterSerializer(data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()
return Response({
'message': 'successfully registered',
}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Это может быть полезно, вот мой RegisterSerializer
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = ['email', 'password', 'password2']
def validate(self, valid):
if valid['password'] != valid['password2']:
raise serializers.ValidationError({"password": "Passwords do not match."})
return valid
def create(self, validated_data):
user = User.objects.register_user(
email=validated_data['email'],
pasword=validated_data['password']
)
return user
Вот моя ошибка трассировки
Пожалуйста, помогите мне, я хочу знать, почему мои автоматизированные тесты не работают должным образом.
Вы неправильно поняли ответ по первой ссылке, в этом ответе в качестве решения предлагается заменить модель в классе Meta
, как в коде ниже. Также убедитесь, что вы установили AUTH_USER_MODEL='custom_user_app.CustomUserModel'
в файле настроек.
# You need to replace the direct import of your model with the one shown below
# from .models import User
from django.contrib.auth import get_user_model
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(
style={'input_type': 'password'},
write_only=True,
)
class Meta:
model = User
fields = ['email', 'password', 'password2']
...
Также попробуйте проделать тот же трюк в своих тестах. Это должно исправить вашу первоначальную ошибку, но в вашем коде все еще есть проблемы, например, в методе сериализатора create
замените ключевое слово pasword
на password
. Надеюсь, теперь вам стало понятнее, что нужно делать, теперь вы должны проверить это сами и сообщить мне, исправлена ли ваша проблема?