如何为Django测试自动创建postgis数据库?

时间:2009-06-24 09:45:22

标签: python django unit-testing

我正在尝试按照Django testing docs中的信息测试在PostGIS数据库上运行的Django应用程序。

通常我会通过复制模板创建一个新数据库:

(作为用户postgres)

createdb -T template_postgis -O lizard test_geodjango2

当我运行./manage.py test时,收到以下消息:

  

创建测试数据库......   创建测试数据库时出错:拒绝创建数据库的权限

     

如果您想尝试删除测试数据库'test_geodjango2',请输入'yes',或者将'no'添加到>取消:

让系统创建数据库的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

您的DATABASE_USER可能无权创建新的数据库/架构。


修改

如果您阅读Django test命令的源代码,您将看到它始终创建一个测试数据库。此外,它会修改您的设置以引用此测试数据库。

请参阅:http://docs.djangoproject.com/en/dev/topics/testing/#id1

您应该使用fixtures。我们就是这样做的。

  1. 从模板数据库中创建“fixture”。使用manage.py dumpdata命令创建包含所有模板数据的JSON文件。 [提示,--indent=2选项为您提供可编辑和修改的可读JSON。]

  2. 将其放在您的应用程序下的fixtures目录中。

  3. 在TestCase类定义中引用fixtures文件。这将在运行测试之前加载夹具。

    class AnimalTestCase(TestCase):
        fixtures = ['mammals.json', 'birds']
        def testFluffyAnimals(self):
             etc.
    
  4. 灯具会替换您的模板数据库。拥有灯具后,您不再需要模板了。

答案 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