我正在为我的模型编写一个测试用例以测试__str__
,但显然失败了。
这是我的 tests.py :
from todoapp.models import User, Task
from django.test import TestCase
class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create(
first_name='john',
last_name='doe',
email='abc@example.com',
password='johndoe')
def test_string_representation(self):
object_name = User.objects.get(id=50)
expected_object_name = object_name.email
self.assertEqual(expected_object_name, str(object_name))
这是我的 models.py :
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def __str__(self):
return self.email
PS :
具有id=50
的用户已经存在
答案 0 :(得分:3)
Django在您运行测试时会创建一个测试数据库,因此听起来像id=50
的用户不存在于测试数据库中。
您已经通过setUp
方法创建了一个用户,所以我建议您在测试中获取该用户。
def test_string_representation(self):
object_name = User.objects.get(email='abc@example.com')
expected_object_name = object_name.email
self.assertEqual(expected_object_name, str(object_name))
请注意,在测试期间获取对象时,通常不应依赖id。例如,如果测试以不同的顺序运行,则id可以随运行而变化。