2

在 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从应用程序的模块和模块创建正常模型,而models不是tests同步models模块中的那些。

目标不是为测试创建实例。

4

2 回答 2

0

Django 会即时创建一个新的空白数据库来运行您的测试,因此如果您有仅用于测试的模型,则不需要通过 syncdb 将它们添加到您的主数据库中。

这在此处的文档中进行了讨论: https ://docs.djangoproject.com/en/dev/topics/testing/overview/#the-test-database

于 2013-08-19T10:39:21.153 回答
-1

使用固定装置。Django 将创建 test_database 并将所有模型放入此数据库并添加测试数据(在夹具中描述)。见这里

此外,在您的 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从现有开发数据库中转储数据。

祝你好运。

于 2013-08-19T10:54:27.663 回答