mpe*_*pen 19 django postgresql webfaction django-testing
我想跑
./manage.py test
Run Code Online (Sandbox Code Playgroud)
但它告诉我
创建测试数据库时出错:拒绝创建数据库的权限
显然它没有创建数据库的权限,但我在共享服务器上,所以我无能为力.我可以通过控制面板创建一个新的数据库,但我认为没有办法让Django自动完成.
那么,我不能手动创建测试数据库,而是告诉Django每次都刷新它,而不是重新创建整个东西?
Thi*_*lli 14
我有类似的问题.但我希望Django绕过为我的一个实例创建一个测试数据库(这不是一个很难的镜像).按照Mark的建议,我创建了一个自定义测试运行器,如下所示
from django.test.simple import DjangoTestSuiteRunner
class ByPassableDBDjangoTestSuiteRunner(DjangoTestSuiteRunner):
def setup_databases(self, **kwargs):
from django.db import connections
old_names = []
mirrors = []
for alias in connections:
connection = connections[alias]
# If the database is a test mirror, redirect its connection
# instead of creating a test database.
if connection.settings_dict['TEST_MIRROR']:
mirrors.append((alias, connection))
mirror_alias = connection.settings_dict['TEST_MIRROR']
connections._connections[alias] = connections[mirror_alias]
elif connection.settings_dict.get('BYPASS_CREATION','no') == 'no':
old_names.append((connection, connection.settings_dict['NAME']))
connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)
return old_names, mirrors
Run Code Online (Sandbox Code Playgroud)
然后我在settings.py中的一个数据库条目中创建了一个额外的dict条目, 'BYPASS_CREATION':'yes',
最后,我配置了一个新的TestRunner
TEST_RUNNER = 'auth.data.runner.ByPassableDBDjangoTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)
我建议使用sqlite3进行测试,同时继续使用mysql/postgres/etc进行生产.
这可以通过将其放在您的设置文件中来实现:
if 'test' in sys.argv:
DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
Run Code Online (Sandbox Code Playgroud)
将在您的django项目主目录中创建一个临时sqlite数据库文件,您将具有写入权限.另一个优点是sqlite3的测试速度更快.但是,如果你使用任何mysql/postgres特定的原始sql(你应该尽量避免使用它),你可能会遇到问题.
| 归档时间: |
|
| 查看次数: |
13080 次 |
| 最近记录: |