不要浪費你的時間讀了這個問題。它已經在下面回答了。Django的 - 通過代碼測試創建的對象不會出現在測試數據庫
我的settings.py包含:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'foo.db',
'TEST_NAME': 'thetest.db'
}
}
在測試代碼是這一行:
allShoes = models.Shoe.objects.filter()
allShoes應包含的對象,因爲該表由views.py稀少,但它是空的在代碼中。我還在測試代碼中放置了一個set_trace()來暫停它,並用sqlite3程序驗證foo.db包含對象,而不是thetest.db。
我已經試過交替派生我的模型類,鞋,從django.test.TestCase和django.test.TransactionTestCase。都沒有工作。
我使用:
>>> django.VERSION
(1, 4, 3, 'final', 0)
和
(venv)bmac:ol b$ python
Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
有什麼我做錯了任何想法?
編輯: 只是爲了澄清,foo.db是空的,剛剛由syncdb創建,在測試運行之前並且test.db不存在。我的測試是一個Selenium測試,它導致一個視圖(被測代碼的一部分)被調用,然後在頁面上進行兩次點擊。每次點擊都有一個調用另一個視圖的AJAX處理程序;該視圖(更多代碼在測試中)在數據庫中創建一個條目。所以,最後,在數據庫被測試運行器銷燬之前,應該在數據庫中有兩次點擊。
編輯: 我刪除TEST_NAME從數據庫到使問題更加簡單,雖然我已經看到了行爲沒有區別。在運行測試時,從我的視圖代碼我可以運行:
models.Shoe.objects.using('default').all()
並查看對象。但是,從我的測試例程中,相同的語句產生一個空列表。
我對任何東西都不使用SQLite,但它看起來好像使用SQLite時的測試數據庫完全是內存中的,這可以解釋您缺少的對象:https://docs.djangoproject.com/en/1.4/主題/測試/#測試數據庫 – Brandon 2013-02-26 02:46:43
@Brandon我編輯的問題,使其特別清楚,對象不是代碼中的allShoes。 – Brian 2013-02-26 03:40:36
如果沒有看到在測試中填充db的代碼,很難知道。 – monkut 2013-02-26 03:57:55