【发布时间】:2012-03-07 19:07:24
【问题描述】:
我正在使用settings.py中设置如下的sqlite3数据库:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'path/to/config.sqlite',
'TEST_NAME': 'path/to/test-config.sqlite',
# ... USER, PASSWORD and PORT left out for brevity
}
}
在测试运行期间开始于:
python manage.py test myapp.mytest
这会临时创建一个数据库文件path/to/test-config.sqlite,我需要在另一个加载了所需装置的应用程序中使用它。
然而,数据库文件是空的,我在一次测试的暂停期间断言:
sqlite> select * from someapp_somemodel;
... no results here :(
其他不需要sqlite文件且内存数据库足够的测试用例,不会出现错误。
我的问题:
- 如果 django 无论如何创建它,为什么不将其数据刷新到数据库文件?和
- 我如何说服 django 这样做,因为我需要将数据转储到临时数据库文件中?
编辑
如果有任何兴趣,我正在使用 Django 1.3.1。
EDIT2
我对fixtures很熟悉,我使用它们来填充数据库,但我的问题是fixtures的数据在测试期间没有写入数据库文件。抱歉,如果我对这个事实不够清楚。
EDIT3
由于我的问题需要澄清,请考虑以下测试设置(与我实际所做的接近):
class SomeTestCase(django.test.TestCase):
fixtures = ["some_fixture.json", "some_other_fixture.json"]
def testSomething(self):
import pdb; pdb.set_trace()
当testSomething 方法运行到断点时,我启动sqlite3 程序并连接到由Django 创建的临时数据库文件。固定装置已加载(我知道,因为其他测试也可以正常工作),但数据未写入临时数据库文件。
【问题讨论】:
-
“我在一个测试暂停期间断言”哪个测试断言? Django 测试或您的应用程序加载数据库?你能澄清一下吗?
-
Django 不会将数据从“正常”数据库转储到测试数据库,因为这没有任何意义。如果测试使用数据库,他们可能会期望数据库处于最小和固定状态。现在这个“我使用它们 [fixtures] 来填充数据库,但我的问题是在测试期间来自fixtures 的数据没有写入数据库文件。” 完全不清楚。不应该在 运行测试之前加载固定装置吗?你的意思是你必须手动加载灯具吗?您能否详细说明并提供示例(如果可能,可运行代码)。
-
只是出于好奇:您正在测试什么行为实际上需要一个 sqlite db 文件?您打算使用 sqlite 上线吗?
-
@jpic: 没有人在这里谈论 normal 数据库,我的问题只是在测试期间创建的临时数据库中,并填充了从指定夹具中获取的数据.是的,固定装置在每次测试之前加载,但显然它们没有写入文件。我已经用一个测试用例更新了我的答案,显示了我想要做什么。
-
@jpic:数据库文件创建于
test-config.sqlite,是一个包含我所有需要的表的有效sqlite 文件。唯一缺少的是表格内容。一旦最后一个测试用例完成,这个文件就会被删除。
标签: python django sqlite django-testing django-database