Почему мой тест 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()
.