тестирование django с локальными настройками - PullRequest
1 голос
/ 26 августа 2011

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

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

Это преднамеренный выбор в Джанго:

Независимо от значения параметра DEBUG в вашем файле конфигурации все тесты Django выполняются с DEBUG = False. Это сделано для того, чтобы убедиться, что наблюдаемый вывод вашего кода совпадает с тем, что будет видно в производственных настройках.

Ссылка: https://docs.djangoproject.com/en/dev/topics/testing/#other-test-conditions

2 голосов
/ 10 июня 2016

Использовать опцию --settings при запуске тестов

python manage.py test --settings=mysite.settings_local
1 голос
/ 26 августа 2011

Я помню, что читал, что вы не должны каким-либо образом изменять значения настроек во время выполнения, это вызывает проблемы.

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