首页 > 解决方案 > django 测试中的错误

问题描述

我试图运行以下测试,但我不确定为什么它不工作,因为在运行测试时创建了一个测试数据库,这意味着新创建的项目的 id 为 1,但我仍然收到一个错误,即没有对象与查询匹配

模型

from django.db import models

# Create your models here.


class Post(models.Model):
    text = models.TextField()

    def __str__(self):
        return self.text[:50]

测试

from django.test import TestCase

from .models import Post

# Create your tests here.


class PostModelTest(TestCase):

    def setup(self):
        post = Post.objects.create(text="just a test")

    def test_text_content(self):
        post = Post.objects.get(id=1)
        expected_obect_name = f'{post.text}'
        self.assertEqual(expected_obect_name, 'just a test')

这是错误 在此处输入图像描述

标签: pythondjango

解决方案


首先你应该命名方法setUpnot setup。这是区分大小写的。但这可能无法解决您的问题,因为 django 不会为每个TestCase类重置自动 ID。因此,如果您有另一个具有相同代码的测试用例,错误将再次发生。要解决它,您需要将 post id 保存为 egself.post_id并在测试方法中使用它而不是1

class PostModelTest(TestCase):

    def setUp(self):
        post = Post.objects.create(text="just a test")
        self.post_id = post.pk  

    def test_text_content(self):
        post = Post.objects.get(id=self.post_id)
        expected_obect_name = f'{post.text}'
    self.assertEqual(expected_obect_name, 'just a test')

推荐阅读