2009-06-24 74 views
4

我试图测试在PostGIS数据库上运行的我的Django应用程序,方法是按照Django testing docs中的信息进行操作。如何自动为Django测试创建postgis数据库?

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

(用户postgres)

createdb -T template_postgis -O lizard test_geodjango2 

当我运行./manage.py test,我得到以下信息:

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

类型“是”,如果你想尝试删除test数据库“test_geodjango2”,或“不”>取消:

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

+0

请在您的settings.py文件中包含相关的DATABASE ...参数。 – 2009-06-24 10:17:22

回答

4

这可能是因为你的DATABASE_USER没有创建新数据库/模式的权限。


编辑

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

看到这个:http://docs.djangoproject.com/en/dev/topics/testing/#id1

你应该做的是使用fixtures。以下是我们如何做到的。

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

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

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

    class AnimalTestCase(TestCase): 
        fixtures = ['mammals.json', 'birds'] 
        def testFluffyAnimals(self): 
         etc. 
    

的灯具更换模板数据库。一旦拥有灯具,您就不再需要该模板。

+0

的确如此。但是,如果我使用具有权限的用户,那么生成的数据库可能不会是postgis数据库? (因为我从模板中复制postgis数据库) – 2009-06-24 11:25:48

2

正如S.Lott所述,使用标准测试命令。

将geodjango与postgis一起使用时,需要将以下内容添加到要正确创建的空间模板的设置中。

设置。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。

相关问题