3

Я получаю немного странное поведение, используя декоратор override_settings. Это в основном работает, когда я запускаю тест самостоятельно, но не буду работать, если я запускаю весь набор тестов.Django override_settings не будет работать для запуска нескольких тестов

В этом тесте я изменяю REST_FRAMEWORK вариант, потому что при выполнении этого набора я хочу, чтобы установить параметры аутентификации, с другими тестами не использует проверку подлинности:

@override_settings(REST_FRAMEWORK=AUTH_REST_FRAMEWORK) 
class AuthTestCase(TestCase): 
    @classmethod 
    def setUpClass(cls): 
     super(AuthTestCase, cls).setUpClass() 
     cls.client = Client() 

    def test_i_need_login(self): 
     response = client.get('/') 
     self.assertEqual(response.status_code, 401) 

так, если я ...

$ python manage.py test myapp/tests/test_auth.py

настройки применяются и отлично работает!

, но если запустить весь набор тестирования, как:

$ python manage.py test

тест потерпит неудачу. Мне кажется, что эти настройки (или некоторые объекты) кэшируются из других тестов. У меня также есть другой класс в другом тестовом файле, который использует экземпляр клиента аналогичным образом.

Окружающая среда: Python: 2.7 Django: 1.10

Edit:

Обходной я нашел к этой проблеме заключается в использовании найти для запуска тестов, это может быть псевдонимом или скрипт с ...

find . -name 'test*.py' -exec python manage.py test {} \;

недостатком является то, что выход из многих тестов г ets, сложенных на экране, и может несколько раз создать/уничтожить базу данных теста. Если вы не добавите опции в команду, как REUSE_DB, если используете django-нос.

ответ

2

В этой ситуации есть warning.

Предупреждение

Файл настроек содержит некоторые параметры, которые только консультировались во время инициализации Django внутренностей. Если вы измените их с помощью override_settings, параметр изменится, если вы получите доступ к нему через модуль django.conf.settings , однако внутренности Django обращаются к нему по-разному. Фактически, использование override_settings() или modify_settings() с этими настройками, вероятно, не будет делать то, что вы ожидаете от него.

При первом запуске тестов вы запускаете конкретный тестовый пример, так что переопределение вступает в силу. Во второй раз, когда вы запускаете тест, вы используете целый набор, и ваш тестовый тест, вероятно, не первый, который запускается. Таким образом, это происходит.

+0

Существует способ вокруг этого ?? возможно, путем перезагрузки модуля. – AndreLobato

+0

Вам нужно будет написать собственный тестовый бегун, но это будет нелегко – e4c5