不要浪费你的时间阅读这个问题。下面已经回答了。
我的 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 包含对象,而不是 test.db。
我交替尝试从 django.test.TestCase 和 django.test.TransactionTestCase 派生我的模型类 Shoe。都没有奏效。
我在用着:
>>> 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 处理程序;该视图(更多正在测试的代码)在数据库中创建一个条目。因此,最后,在 DB 被测试运行程序销毁之前,应该在 DB 中单击两次。
编辑:我从 DATABASES 中删除了 TEST_NAME 以使问题更简单,尽管我没有看到行为上的差异。在运行测试时,从我的视图代码中我可以运行:
models.Shoe.objects.using('default').all()
并查看对象。但是,在我的测试例程中,相同的语句会生成一个空列表。