Секретный ключ не найден при выполнении Django модульных тестов - PullRequest
1 голос
/ 15 апреля 2020

Всякий раз, когда я запускаю свои Django -тесты через файл unittests.py в основной папке, SECRET KEY в .env не обнаруживается. Как правильно настроить обычный файл Unittests-File для серии Django -Tests? Я написал свой settings.py таким образом, что он может написать новый ключ, если другой ключ не найден:

--- settings.py ---

try:
    print("Current key: " + os.environ['SECRET_KEY'])
    SECRET_KEY = os.environ['SECRET_KEY']
except KeyError as kerr:
    logging.error("Can't find Secret Key in settings.py")
    path_env = os.path.join(BASE_DIR, '.env')
    utils.generate_secret_key(path_env)
    dotenv.read_dotenv(path_env)
    SECRET_KEY = os.environ['SECRET_KEY'] 

Это сработало, но поскольку при каждом запуске юнит-тестов создается новый новый ключ, который не предназначен. До сих пор я запускаю юнит-тесты со скриптом по умолчанию, который работает нормально, за исключением проблемы с ключом:

--- unittests.py ---

import DjangoProject.tests_client
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(DjangoProject.tests_client))

Реализованный Тест не является слишком большим сюрпризом:

from django.test import TestCase
import django
django.setup()

class TestBase(TestCase):

    def setUp(self):
        #Stuff

    def tearDown(self):
        self.removeData()

    def test_Clienttest(self):
        #Stuff

Классы Unittests-C наследуют, как требуется от django.test.TestCase и делают то, что они должны:

Выполнение Unittest-Script с этими настройками приведет к ошибке, поскольку он не может найти SECRET KEY (я сделал некоторую отладку, и действительно, ключ не загружен в среде). Для некоторых тестов я отключил строки в settings.py, которые создают новый ключ, и сразу же получил ошибку:

$ python3.7 unittests.py
ERROR:root:'SECRET_KEY'
Traceback (most recent call last):
  File "unittests.py", line 25, in <module>
    import DjangoProject.tests_client
  File "/home/djangohome/DjangoProject/tests_client.py", line 23, in <module>
    django.setup()
  File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py", line 176, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Запуск теста через manage.py тоже отлично работает:

$ python3.7 manage.py test DjangoProject.tests_client
Current key: o5at!z(_()s2vbp=n4exot@gjo1==!w39uby*eju)ej#1o^lwn
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
... And everything as supposed to ...

Но как мне реализовать запуск через manage.py в обычных тестах Unit, чтобы SECRET KEY загружался правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...