【问题标题】:PyCharm: running Django tests with HerokuPyCharm:使用 Heroku 运行 Django 测试
【发布时间】:2019-04-16 09:39:13
【问题描述】:

我正在尝试从 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 变量

【问题讨论】:

  • .env_test 文件的内容是什么?
  • 你能粘贴你的settings.py(仅限数据库部分)和.env_test 结构吗? @大卫-d
  • @RachSharp 已更新 :)
  • @Majid Rouhi 已更新 :)

标签: django heroku pycharm


【解决方案1】:

无论如何,如果您发布您的.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>

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2020-01-28
    • 2018-04-20
    • 2011-06-01
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多