2014-02-24 59 views
5

我試圖做一個簡單的Django測試,使用Django App目錄下的tests.py文件(mysite/polls/tests.py),但每個一次,我跑「蟒蛇manage.py測試民意調查」,我得到的錯誤:Django測試錯誤「權限被拒絕創建數據庫」 - 使用Heroku Postgres

C:\Python27\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 3.0\helpers\pycharm\django_test_manage.py" test polls "C:\Users\<myname>\PycharmProjects\mysite" 
Testing started at 8:40 PM ... 
Creating test database for alias 'default'... 
Type 'yes' if you would like to try deleting the test database 'test_<database>', or 'no' to cancel: Got an error creating the test database: permission denied to create database 

從我讀過的東西,顯然Heroku的PG使用一個共享的數據庫,所以我沒有創建權限/銷燬數據庫,這是測試所必需的。有沒有一個明顯的解決辦法呢?我仍在開發我的本地驅動器,所以任何解決方法將不勝感激。我知道測試是編程的一個重要部分,所以我希望能夠儘快實施測試方法。

我正在嘗試使用TestCase django類。

我所用:
1)的Heroku Postgres的業餘愛好開發計劃
2)的Postgres 9.3.3
3)的Python 2.7.6
4)的Django 1.6.1


編輯: 因此,在做了更多研究之後,我發現我可以重寫settings.py中的DATABASES dict變量以使用SQLite在本地進行測試(當'test'是shell中的參數時),但我仍然更喜歡PostgreSQL實現,因爲從我讀的內容來看,PostgreSQL更爲嚴格(我很喜歡)。

任何有興趣在半解決方案,我發現(#1的另一成員提供):

if 'test' in sys.argv: 
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'} 

不要忘了導入sys

回答

0

沒有理由需要在測試中創建數據庫。相反,如果未定義DATABASE_URL環境變量,請更改測試以訪問本地數據庫。下面是我在Node.js的,在那裏我有本地測試和開發的數據庫做,和Heroku上提供的生產DB:

if (typeof(process.env.DATABASE_URL) !== 'undefined') { 
    dbUrl = url.parse(process.env.DATABASE_URL); 
} 
else if (process.env.NODE_ENV === 'test') { 
    dbUrl = url.parse('tcp://postgres:[email protected]:5432/test'); 
} 
else { 
    dbUrl = url.parse('tcp://postgres:[email protected]:5432/db'); 
} 
+1

Django的測試獨立運行,所以每個測試建立一個新的數據庫,運行測試,然後刪除該數據庫,以確保當您執行計數或加入等操作時不會發生交叉談話。 – Soviut

相關問題