python - 测试完成后,Django TestCase 不会破坏测试数据
问题描述
我目前正在尝试为应用程序编写我的第一个 Django 规范。但是,每次我运行测试时,我都会收到一个IntegrityError: UNIQUE constraint failed: auth_user.username
时,由于我在上次运行测试中创建的用户现在存在于数据库中,我都会收到一个。
我的印象是 TestCase 将测试代码包含在数据库事务中,以便测试期间创建的所有数据在完成时回滚?我在这里做错了什么?
from django.test import TestCase
from django.contrib.auth.models import User
from basic.models import SavedModels
# Create your tests here.
class SavedModelsTestCase(TestCase):
User.objects.create(username="user_001",
password="useruser",
first_name="Test",
last_name="User",
email="test_user@test.com"
)
user = User.objects.filter(username="user_001")
saved_model = SavedModels.objects.create(name="Test Model",
description="A model",
user=user
)
def test_saved_models(self):
saved_model = create_saved_model()
self.assertTrue(isinstance(saved_model, SavedModels))
self.assertEqual(saved_model.name, "Test Model")
self.assertEqual(saved_model.description, "A model")
self.assertEqual(saved_model.user, user)
解决方案
它不像那样工作,你需要两个名为 setup 的函数来设置所需的数据(它在测试开始时运行)你需要在这里创建你的用户和 tearDown(它在最后运行)来做清理在添加这两个之后运行该测试后,您的代码将变成这样
class SavedModelsTestCase(TestCase):
def setUp(self):
#create your user here
def tearDown(self):
# for any clenaup required none in your case
def test_saved_models(self):
saved_model = create_saved_model()
self.assertTrue(isinstance(saved_model, SavedModels))
self.assertEqual(saved_model.name, "Test Model")
self.assertEqual(saved_model.description, "A model")
self.assertEqual(saved_model.user, user)
推荐阅读
- angular - 离子侧边菜单 - view.ts 中的触发功能
- android - 如何设置 MutableLiveData 的值
() 在 Kotlin 中是不利的吗? - c++ - 使用 ffmpeg API 将 pcm_alaw 类型的音频数据包装成 MKA 音频文件
- excel - 做直到什么都没找到
- json - angular.json 资产:使用通配符作为名称
- c - 如何shell命令注入文件
- node.js - 在某些情况下,将 nodejs 缓冲区转换为字符串并返回到缓冲区会产生不同的结果
- typescript - 在 Typescript 中指定具有至少一个已知属性的对象
- javascript - 点击事件冒泡到父级后输入按钮消失
- python - 尝试将多个参数设置为while循环Python