Django: настройки для тестов многоразового приложения? - PullRequest
5 голосов
/ 15 марта 2020

Я создал небольшое приложение в Django, и runserver и admin работают нормально.

Я написал несколько тестов, которые можно вызвать с помощью python manage.py test, и тесты пройдены.

Теперь я хотел бы нравится вызывать один конкретный тест через PyCharm.

Это не получается так:

/home/guettli/x/venv/bin/python 
   /snap/pycharm-community/179/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py 
   --path /home/guettli/x/xyz/tests.py
Launching pytest with arguments /home/guettli/x/xyz/tests.py in /home/guettli/x

============================= test session starts ==============================
platform linux -- Python 3.6.9, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 --
cachedir: .pytest_cache
rootdir: /home/guettli/x
collecting ... 
xyz/tests.py:None (xyz/tests.py)
xyz/tests.py:6: in <module>
    from . import views
xyz/views.py:5: in <module>
    from xyz.models import Term, SearchLog, GlobalConfig
xyz/models.py:1: in <module>
    from django.contrib.auth.models import User
venv/lib/python3.6/site-packages/django/contrib/auth/models.py:2: in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
venv/lib/python3.6/site-packages/django/contrib/auth/base_user.py:47: in <module>
    class AbstractBaseUser(models.Model):
venv/lib/python3.6/site-packages/django/db/models/base.py:107: in __new__
    app_config = apps.get_containing_app_config(module)
venv/lib/python3.6/site-packages/django/apps/registry.py:252: in get_containing_app_config
    self.check_apps_ready()
venv/lib/python3.6/site-packages/django/apps/registry.py:134: in check_apps_ready
    settings.INSTALLED_APPS
venv/lib/python3.6/site-packages/django/conf/__init__.py:76: in __getattr__
    self._setup(name)
venv/lib/python3.6/site-packages/django/conf/__init__.py:61: in _setup
    % (desc, ENVIRONMENT_VARIABLE))
E   django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, 
    but settings are not configured. You must either define the environment variable 
    DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Assertion failed
collected 0 items / 1 error

Я понимаю фон: мое приложение xyz можно использовать повторно. Он не содержит никаких настроек. Приложение не знает (и не должно знать) мой проект. Но настройки в моем проекте.

Как решить эту проблему?

Я прочитал замечательные django документы, но не смог найти решение.

Как установить DJANGO_SETTINGS_MODULE если вы выполняете один конкретный тест непосредственно из PyCharm с помощью «Run» (ctrl-shift-F10)?

Ответы [ 3 ]

3 голосов
/ 30 марта 2020

Вы можете указать настройки в своей тестовой команде

Предполагается, что вы находитесь в каталоге xyz, а структура:

/xyz
   - manage.py
   - xyz/
       - settings.py

Следующая команда должна работать

python manage.py test --settings=xyz.settings
3 голосов
/ 29 марта 2020

Вы можете добавить DJANGO_SETTINGS_MODULE в качестве переменной среды:

В меню: Выполнить -> Редактировать конфигурации -> Шаблоны -> Python Тесты -> Юнитестесты

Pycharm configs

И удалите старые записи "Unittests for tests ....".

1 голос
/ 31 марта 2020

Отредактировано: чтобы этот метод работал django поддержка должна быть включена в pycharm. Я предполагаю, что должна быть возможность установить эквивалентный шаблон в версии Pycharm для сообщества.

Метод с включенной поддержкой django:

Я считаю, что наиболее Удобный способ, который также позволяет вам напрямую щелкать конкретный тестовый пример и запускать его непосредственно в pycharm без необходимости каждый раз устанавливать настройки, заключается в следующем:

-> Редактировать конфигурацию (запуск / отладка конфигураций)

-> Шаблоны и выберите «Django Тесты»

-> Отметьте «Пользовательские настройки», а затем перейдите к нужным настройкам.

Затем при запуске тестирует непосредственно в pycharm, он будет использовать его в качестве шаблона.

Если вы тестируете любым другим поддерживаемым методом с помощью pycharm , вы можете выбрать платформу тестирования в pycharm: Выбрать среду тестирования , а затем создайте шаблон для него.

...