2013-08-19 84 views
2

在Django中,你可以通過你的tests模塊中創建它們僅用於測試創建模型:Django unittests中的模型如何同步到數據庫?

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模塊的那些。

的目標不是創建測試實例。

回答

0

Django的創建上飛一個新的空白數據庫運行測試,所以如果你有隻是用於測試的模型,他們並不需要由執行syncdb被添加到您的主數據庫。

這在這裏的文檔進行了討論: https://docs.djangoproject.com/en/dev/topics/testing/overview/#the-test-database

+0

是的,這是發生了什麼,但代碼在哪裏,除了'models'模塊的那些代碼外,還告訴'syncdb'同步'tests'模塊中創建或引用的模型? – Martin

-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

好運。

+0

目標不是創建用於測試的實例,而是找到代碼,它告訴syncdb同步這些測試模型。 – Martin

+0

哦,對不起。然後看到另一個答案。 –