在Django中,您可以通过在tests
模块中创建模型来创建仅用于测试的模型:
from django.db import models
from django.test import TestCase
class TestModel(models.Model):
# attributes
class MyTest(TestCase):
def test_something(self):
# do something with TestModel
现在我想知道syncdb
命令如何知道,该模型也必须同步到数据库。
我搜索了Django的代码,但我找不到任何明显的代码。与syncdb
相关的所有代码仅适用于应用内的models
模块,但从不查看tests
模块。
修改:只是为了清楚一点:我的问题的目标是,syncdb
如何从应用程序创建正常模型{{1}如果测试正在运行,则{em>和来自models
模块的模块和仅来自tests
模块的模块。
目标不是为测试创建实例。
答案 0 :(得分:0)
Django动态创建一个新的空白数据库来运行测试,因此如果您只有用于测试的模型,则不需要通过syncdb将它们添加到主数据库中。
这在以下文档中讨论: https://docs.djangoproject.com/en/dev/topics/testing/overview/#the-test-database
答案 1 :(得分:-1)
使用固定装置。 Django将创建test_database并将所有模型放入此数据库并添加测试数据(在fixture中描述)。 请参阅here。
此外,在您的tests.py中添加类似
的内容from django.test import TestCase
from django.test.client import Client
class MyTest(TestCase):
fixtures=["fixture.yaml","fixture.json"]
def setUp(self):
celf.c = Client()
def test_something(self):
resp = self.client.get("/")
self.assertContains(resp,"Something from fixtures.")
Something from your fixture
是必须在"/"
视图功能页面上打印的字符串。
这是我用来测试我的观点和模型的方式
此外,您可以从现有开发数据库转储数据,使用manage.py dumpdata。