我可能在这里忽略了一些显而易见的事情。 我正在使用django 1.5.x,并基于django的TestCase类创建单元测试。 我已经在settings中定义了一堆数据库,因为我想从许多不同的源中获取(只读)数据。运行测试时,我只想创建默认数据库的测试版本,其余数据库应被标记为只读,并且不尝试创建test_db_name(用户定义的数据库名无法(也不会)具有创建这些数据库的权限)。
毫无疑问,这是可能的 - 正如我所说,我可能忽略了一些显而易见的事情?
非常感谢您的帮助。
马修
我可能在这里忽略了一些显而易见的事情。 我正在使用django 1.5.x,并基于django的TestCase类创建单元测试。 我已经在settings中定义了一堆数据库,因为我想从许多不同的源中获取(只读)数据。运行测试时,我只想创建默认数据库的测试版本,其余数据库应被标记为只读,并且不尝试创建test_db_name(用户定义的数据库名无法(也不会)具有创建这些数据库的权限)。
毫无疑问,这是可能的 - 正如我所说,我可能忽略了一些显而易见的事情?
非常感谢您的帮助。
马修
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'db.sqlite3',
'TEST_NAME': '/tmp/test.sqlite3',
},
}
如果你不想建立(或重建)测试数据库,你需要将数据库名称复制到TEST_NAME中,并使用新的python manage.py test
--keepdb
命令,保留数据库的完整性,而不是让Django在运行之间尝试删除它。截至2014年6月,您必须升级到Django的开发版本才能访问此功能;最终,这将包含在稳定版本中。我理解的缺点是,它适用于所有数据库,而不仅仅是只读数据库。
settings.py
DATABASES = {
'default': {...},
'other': {...}
}
DATABASE_ROUTERS = ['routers.MyRouter']
...
TESTING = 'test' in sys.argv
if TESTING:
DATABASE_ROUTERS = []
DATABASES.pop('other')