我正在尝试为我的代码创建一个基本的单元测试。这是我正在运行的...
from django.test import TestCase
from django.contrib.auth.models import User
from feed.models import Post
class PostTests(TestCase):
def setUp(self):
user = User.objects.first()
Post.objects.create(title='test', content='more testing', author=user)
def test_content(self):
post = Post.objects.get(id=1)
expected_object_name = f'{post.content}'
self.assertEquals(expected_object_name, 'more testing')
我得到的错误是“ django.db.utils.IntegrityError:(1048,“ Column'author_id'不能为空”))“我相信该错误正在寻找用户,但是当我在外壳中运行它时更新没有问题。
答案 0 :(得分:3)
Django为测试创建了一个单独的数据库,该数据库最初是空的。因此,User.objects.first()
返回None。然后,当您尝试创建信息时,将None
传递为author
。
您需要在此处创建用户。
或者,您可以从SimpleTestCase
而不是TestCase
扩展,并使用类似factory boy的名称。它有一个DjangoModelFactory
类,您可以使用它来创建伪Model
对象,它们的作用与真实实例一样。