首页 > 解决方案 > 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

PSid=50已经存在的用户

标签: pythondjango

解决方案


运行测试时 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 可以从运行到运行更改,例如,如果测试以不同的顺序运行。


推荐阅读