Python 2.7
Джанго 1.2
Я получаю странное поведение local_settings при тестировании приложения Django. У меня <project>/settings.py
настроен так:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ADMINS = (
("Me", "me@me.com"),
)
MANAGERS = ADMINS + (('Person1', 'person1@blah.com'),)
# ... rest of settings
try:
from local_settings import *
except ImportError:
pass
и в <project>/local_settings.py
у меня есть:
DEBUG = True
MANAGERS = (
('Me', 'me@me.com'),
)
Таким образом, при локальной работе значение MANAGERS
должно быть (('Me', 'me@me.com'),)
, а DEBUG
должно быть установлено на True
.
Однако в тестах для одного из моих приложений я тестирую settings.DEBUG
и получаю False
, но настройка MANAGERS
установлена правильно (в ней просто «Я»). Есть идеи, почему это произойдет? Вот соответствующие части файла <project>/<app>/tests.py
:
from django.conf import settings
from django.test import TestCase
# ...
class MyTests(TestCase):
def mytest(self):
if settings.DEBUG:
self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'),))
else:
self.assertEqual(settings.MANAGERS, (('Me', 'me@me.com'), ('Person1', 'person1@blah.com')))
Результат
AssertionError: (('Me', 'me@me.com'),) != (('Me', 'me@me.com'), ('Person1', 'person1@blah.com'))
Похоже, что он тестирует ветку else
из-за неправильной установки settings.DEBUG
, а затем поднимает AssertionError
, поскольку settings.MANAGERS
установлен правильно.
Если я запускаю python manage.py shell
, я получаю это:
>>> from django.conf import settings
>>> settings.DEBUG
True
>>> settings.MANAGERS
(('Me', 'me@me.com'),)
Так что они там правильно установлены.
Я знаю, что могу вручную изменить настройки в своих тестах, но я хотел попробовать использовать settings.DEBUG
, чтобы тест проходил независимо от того, был ли он запущен локально или в производстве.
Есть идеи?