Всякий раз, когда я запускаю свои 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
загружался правильно?