2009-06-24 75 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。

相關問題