我正在尝试按照Django testing docs中的信息测试在PostGIS数据库上运行的Django应用程序。
通常我会通过复制模板创建一个新数据库:
(作为用户postgres)
createdb -T template_postgis -O lizard test_geodjango2
当我运行./manage.py test
时,收到以下消息:
创建测试数据库...... 创建测试数据库时出错:拒绝创建数据库的权限
如果您想尝试删除测试数据库'test_geodjango2',请输入'yes',或者将'no'添加到>取消:
让系统创建数据库的最佳方法是什么?
答案 0 :(得分:4)
您的DATABASE_USER
可能无权创建新的数据库/架构。
修改强>
如果您阅读Django test
命令的源代码,您将看到它始终创建一个测试数据库。此外,它会修改您的设置以引用此测试数据库。
请参阅:http://docs.djangoproject.com/en/dev/topics/testing/#id1
您应该使用fixtures。我们就是这样做的。
从模板数据库中创建“fixture”。使用manage.py dumpdata
命令创建包含所有模板数据的JSON文件。 [提示,--indent=2
选项为您提供可编辑和修改的可读JSON。]
将其放在您的应用程序下的fixtures
目录中。
在TestCase类定义中引用fixtures文件。这将在运行测试之前加载夹具。
class AnimalTestCase(TestCase):
fixtures = ['mammals.json', 'birds']
def testFluffyAnimals(self):
etc.
灯具会替换您的模板数据库。拥有灯具后,您不再需要模板了。
答案 1 :(得分:2)
正如S.Lott所提到的,使用标准的 test 命令。
将geodjango与postgis一起使用时,您需要将以下内容添加到您的设置中,以便正确创建空间模板。
<强> settings.py 强>
POSTGIS_SQL_PATH = 'C:\\Program Files\\PostgreSQL\\8.3\\share\\contrib'
TEST_RUNNER='django.contrib.gis.tests.run_tests'
<强>控制台强>
manage.py test
这里描述: http://geodjango.org/docs/testing.html?highlight=testing#testing-geodjango-apps
我还没有调查过,但是当我这样做时,系统会在尝试安装必要的sql时提示输入数据库密码。
答案 2 :(得分:0)
从Django 1.11开始,Django支持仅Postgres的设置settings.DATABASE[whatever]['TEST']['TEMPLATE']
,该设置指示从中创建测试数据库的模板:
https://docs.djangoproject.com/en/dev/ref/settings/#template