Модульные тесты Django для моделей, сериализаторов, URL и представлений
Я новичок в модульном тестировании. Мне нужно выполнить тест для следующих моделей, сериализаторов, представлений & urls. Кто-нибудь может мне помочь.
Models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth import get_user_model
# Create your models here.
class User(AbstractUser):
"""This Class is used to extend the in-build user model """
ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
date_of_birth = models.DateField(verbose_name='Date of Birth', null=True)
profile_image = models.ImageField(upload_to='media/profile_images', verbose_name='Profile Image', default='media/profile_images/default.webp', blank=True)
bio = models.TextField(verbose_name='Bio')
role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES)
gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)
Serializers.py
class UserSerializer(serializers.ModelSerializer):
following = serializers.SerializerMethodField()
followers = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('first_name','last_name','username','password','email','date_of_birth',
'profile_image','bio','role','gender', 'following','followers')
extra_kwargs = {'is_active':{'write_only':True},
'password':{'write_only':True}}
def create(self, validated_data):
logger.info('Information Incoming!')
return User.objects.create_user(**validated_data)
def update(self, *args, **kwargs):
user = super().update( *args, **kwargs)
p = user.password
user.set_password(p)
user.save()
return user
def get_following(self, obj):
return FollowingSerializer(obj.following.all(), many=True).data
def get_followers(self, obj):
return FollowersSerializer(obj.followers.all(), many=True).data
Views.py
class UserAPI(viewsets.ModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
# permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
Я попытался реализовать юнит-тест, но получаю ошибку self.assertEquals(user.get_last_name(), "Johnson")
- AttributeError: 'User' object has no attribute 'get_last_name'
tests.py
class UserTests(TestCase):
def setUp(self):
User.objects.create(
first_name='Louis',last_name='Johnson',username='louis.johnson',
email='louis@mail.com',date_of_birth='1994-12-12', bio='Hello I am Louis',
role='MODERATOR',gender='MALE')
def test_users_model(self):
user = User.objects.get(first_name='Louis')
self.assertEquals(user.get_last_name(), "Johnson")
self.assertEquals(user.get_username(), "louis.johnson")
Может ли кто-нибудь помочь разобраться с этим. Любая подробная документация или помощь с вашей стороны была бы большой поддержкой.
У объекта пользователя нет функции, подобной get_last_name
. Вы можете вызвать атрибут напрямую следующим образом:
def test_users_model(self):
user = User.objects.get(first_name='Louis')
self.assertEquals(user.last_name, "Johnson")
...