Модульные тесты 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")
        ...
Вернуться на верх