PyCharm: запуск тестов Django с Heroku - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь запустить модульные тесты из PyCharm без успеха в проекте Django.

Вот архитектура моего проекта:

- fugo/  (root repository)
    - .env_test
    - fugoproj/ (django project repository)
        - config/
            - settings.py

Я установил EnvFile плагин для загрузки переменных окружений .env_test, которые используются моим settings.py. Затем я создал конфигурацию Run / Debug на Pycharm enter image description here enter image description here

При запуске тестов из этой конфигурации на консоли Pycharm отображается сообщение «Нет таких настроек файла настроек». Тесты найдены и выполнены, но не прошли, потому что настройки, очевидно, не могут быть загружены.

enter image description here

Юнит-тесты отлично работают при запуске из оболочки Bash. Что не так с моей конфигурацией? Спасибо.

РЕДАКТИРОВАТЬ, чтобы предоставить информацию о 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 переменную

1 Ответ

0 голосов
/ 20 апреля 2019

В любом случае, было бы хорошо, если бы вы опубликовали свою структуру .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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...