Почему мой тест Django проходит, когда он должен провалиться?

Я новичок в тестировании любого рода в кодировании. Это продолжение этого ответа на мой вопрос. Ответ устанавливает, что этот тип метода модели не должен сохранять объект в базу данных:

@classmethod
def create(cls, user, name):
    list = cls(user=user, name=name) 
    return list

Если это так, то мне интересно, почему этот тест проходит и говорит, что все в порядке?

from django.test import TestCase
from .models import List
from django.contrib.auth.models import User

class ListTestCase(TestCase):
    def setUp(self):
        user_1 = User(username="test_user", password="abcd")
        user_1.save()
        List.objects.create(user=user_1, name="mylist")
        List.objects.create(user=user_1, name="anotherlist")
        
    def test_lists_is_created(self):
        user_1 = User.objects.get(username="test_user")
        list_1 = List.objects.get(user=user_1, name="mylist")
        self.assertEqual("mylist", list_1.name)
   

Причина, по которой тест проходит, заключается в том, что вы вызываете метод, отличный от того, который вы реализовали.

Строка в ListTestCase.setUp()

List.objects.create(user=user_1, name="mylist")

фактически, вызывайте метод QuerySet.create() от Django. Обратите внимание, что он вызывается через List.objects.create(), а не List.create(). Поэтому объект сохраняется в базе данных и тест проходит.

В вашем случае вы реализовали метод create() внутри модели List, поэтому вы должны вызвать List.create().

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