我正在尝试从PyCharm运行单元测试,但在Django项目中没有成功。
这是我的项目的体系结构:
- fugo/ (root repository)
- .env_test
- fugoproj/ (django project repository)
- config/
- settings.py
我安装了EnvFile插件来加载我的settings.py使用的.env_test变量环境。 然后我在Pycharm上创建了一个运行/调试配置
从此配置运行测试时,Pycharm控制台将显示“没有此类设置文件设置”。找到并运行测试,但失败了,因为显然无法加载设置。
从Bash shell运行时,单元测试可以完美运行。 我的配置有什么问题? 谢谢。
DATABASES
设置变量的信息:在settings.py中,我使用django_heroku
包(由Heroku提供)来自动配置数据库:
django_heroku.settings(locals())
django_heroku.settings
方法如下:
def settings(config, *, db_colors=False, databases=True, test_runner=True, staticfiles=True, allowed_hosts=True, logging=True, secret_key=True):
# Database configuration.
# TODO: support other database (e.g. TEAL, AMBER, etc, automatically.)
if databases:
# Integrity check.
if 'DATABASES' not in config:
config['DATABASES'] = {'default': None}
if db_colors:
# Support all Heroku databases.
# TODO: This appears to break TestRunner.
for (env, url) in os.environ.items():
if env.startswith('HEROKU_POSTGRESQL'):
db_color = env[len('HEROKU_POSTGRESQL_'):].split('_')[0]
logger.info('Adding ${} to DATABASES Django setting ({}).'.format(env, db_color))
config['DATABASES'][db_color] = dj_database_url.parse(url, conn_max_age=MAX_CONN_AGE, ssl_require=True)
if 'DATABASE_URL' in os.environ:
logger.info('Adding $DATABASE_URL to default DATABASE Django setting.')
# Configure Django for DATABASE_URL environment variable.
config['DATABASES']['default'] = dj_database_url.config(conn_max_age=MAX_CONN_AGE, ssl_require=True)
logger.info('Adding $DATABASE_URL to TEST default DATABASE Django setting.')
# Enable test database if found in CI environment.
if 'CI' in os.environ:
config['DATABASES']['default']['TEST'] = config['DATABASES']['default']
else:
logger.info('$DATABASE_URL not found, falling back to previous settings!')
if test_runner:
# Enable test runner if found in CI environment.
if 'CI' in os.environ:
config['TEST_RUNNER'] = 'django_heroku.HerokuDiscoverRunner'
我的.env_test
文件不包含任何DATABASE_URL
变量
答案 0 :(得分:0)
如果您仍然发布.env_test
结构,那可能会很好。我猜你的配置必须有一个包含数据库配置的键。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
否则,一个简单的解决方案是创建新的settings.py
并删除Heroku函数,然后直接放置数据库配置并从.env_test
设置其值:
settings_test.py:
...
DATABASES = {
'default': {
'ENGINE': os.environ['database_engine'],
'NAME': os.environ['database_name'],
}
}
.env_test.py:
...
database_engine=<DATABASE_ENGINE>
database_name=<DATABASE_NAME>