python - Django 测试用例测试模型失败
问题描述
我正在为我的模型编写一个测试用例来测试它,__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
已经存在的用户
解决方案
运行测试时 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 可以从运行到运行更改,例如,如果测试以不同的顺序运行。
推荐阅读
- elasticsearch - ElasticSearch 聚合版本化文档,并通过存储桶中的特定属性和计算字段进行选择
- python - ImportError:无法从“tensorflow.python.keras.layers.no rmalization”导入名称“LayerNormalization”
- azure - 使用自托管代理为 Power Platform 设置使用 azure DevOps 的管道(Power Platform Publish Customizations Task Failure)
- ios - Swift MVVM,一个没有 ViewModel 参考的 ViewController?
- python-3.x - 使用一种热编码器技术后的数据提取
- php - Laravel get 方法参数无法获取
- visual-studio-code - 使用 EF Core 和 db2 搭建 DbContext 时出错
- css - 使用无线电组时如何摆脱材质对话框中无用的滚动条?
- python - 从列表创建字典而不覆盖
- flutter - Flutter:Dart Cast Error(用于空值的空检查运算符)