我正在尝试使用Django App目录中的tests.py文件(mysite / polls / tests.py)进行简单的Django测试,但每次运行'python manage.py test polls'时,我都会得到错误:
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更严格(我是它的粉丝)。
对于任何对我发现的半解决方案感兴趣的人(由Stackoverflow的另一名成员提供):
if 'test' in sys.argv:
DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
不要忘记导入sys
。
答案 0 :(得分:-2)
您没有理由需要使用测试创建数据库。相反,如果未定义DATABASE_URL环境变量,请更改测试以访问本地数据库。这是我在Node.js中所做的,我有本地测试和开发数据库,以及Heroku提供的生产数据库:
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:postgres@127.0.0.1:5432/test');
}
else {
dbUrl = url.parse('tcp://postgres:postgres@127.0.0.1:5432/db');
}