Django Unit tests can't ovveride variable from tessting when post

Мне нужен тест для представления обновления. Мое представление обновления создает папки. Для тестов я хочу изменить путь к папкам. Я пытался изменить настройки с помощью декоратора override_settings и с помощью with self.settings(): уставок из https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.modify_settings

Но когда я запускаю пост в своем тесте, папки создаются согласно настройкам моего проекта, а не настройкам теста. Путь для создания папок в моих настройках сохраняется в переменной CERTIFICATION_WORKS_ROOT. В моем представлении я импортирую ее как from django.conf import settings и затем output_path = settings.CERTIFICATION_WORKS_ROOT. Для отладки я добавил в представлении print(f'output_path in view - {output_path}'), а в тесте print(f'test settings - {settings.CERTIFICATION_WORKS_ROOT}').

Вот мой тестовый модуль:

Вот вывод терминала:

...
...
INFO 2022-01-23 09:45:20,665 signals: user None added Migration 0001_initial for sessions
output_path in view - /home/oleh/Documents/certDB_output/
System check identified no issues (0 silenced).
INFO 2022-01-23 09:45:22,858 signals: user None added body1
INFO 2022-01-23 09:45:22,869 signals: user None added user1
INFO 2022-01-23 09:45:22,877 signals: user None added enterprise_one, , код ЄДРПОУ: 
INFO 2022-01-23 09:45:22,882 signals: user None added enterprise_two, , код ЄДРПОУ: 
INFO 2022-01-23 09:45:22,913 signals: user None added body1 Договір №:7/21/1, від: 2022-01-01, Заявник: enterprise1, вартість: 100
INFO 2022-01-23 09:45:22,932 signals: user None added Справа №: 7/21/1; Сума оплати: 100; Дата оплати: 2022-01-04; Замовник: enterprise1
INFO 2022-01-23 09:45:22,961 signals: user None updated body1
INFO 2022-01-23 09:45:23,069 signals: user None added malcwkkfqvgmbwd768v4gn8f63f49tb6
INFO 2022-01-23 09:45:23,083 signals: user None added 86y7qzb4058ed9wajuqbz5t756sz1dmk
INFO 2022-01-23 09:45:23,092 signals: user None deleted malcwkkfqvgmbwd768v4gn8f63f49tb6
INFO 2022-01-23 09:45:23,103 signals: user None updated user1
INFO 2022-01-23 09:45:23,108 signals: user None updated 86y7qzb4058ed9wajuqbz5t756sz1dmk
.INFO 2022-01-23 09:45:23,381 signals: user None updated body1
test settings - /home/oleh/Documents/test_output/
INFO 2022-01-23 09:45:23,396 signals: user None added wucx5j3gd0esfm10twhf1vrtgxy8gjl7
INFO 2022-01-23 09:45:23,406 signals: user None added x0l3976s8x2hn2z8zwurilmjlzeokfk7
INFO 2022-01-23 09:45:23,412 signals: user None deleted wucx5j3gd0esfm10twhf1vrtgxy8gjl7
INFO 2022-01-23 09:45:23,417 signals: user None updated user1
INFO 2022-01-23 09:45:23,422 signals: user None updated x0l3976s8x2hn2z8zwurilmjlzeokfk7
test settings - /home/oleh/Documents/test_output/
INFO 2022-01-23 09:45:23,477 views: '/home/oleh/Documents/certDB_output/body1/enterprise1/2022/7_21_1 від 01-01-2022' moved to '/home/oleh/Documents/certDB_output/body1/enterprise2/2022/7_21_1 від 02-01-2022' successfully.
INFO 2022-01-23 09:45:23,499 signals: user None updated body1 Договір №:7/21/1, від: 2022-01-02, Заявник: enterprise2, вартість: 150.0
test settings - /home/oleh/Documents/test_output/
.
----------------------------------------------------------------------
Ran 2 tests in 0.910s

OK
Destroying test database for alias 'default'...

Папки были созданы в certDB_output, а не в test_output папке

Как сейчас написано в вашем коде, настройки считываются только один раз во время импорта.

Удалите output_path = settings.CERTIFICATION_WORKS_ROOT и используйте settings.CERTIFICATION_WORKS_ROOT в вашем методе get_path.

Или установите патч case.views.output_path в свой тест.

Django не рекомендует задавать псевдоним ваших настроек, но именно это вы и сделали. Смотрите docs

Наконец, избегайте называть свои настройки константами уровня модуля, так как функция override_settings() не будет работать с такими значениями, поскольку они оцениваются только при первом импорте модуля.

Так что внутри get_path нужно заменить outout_path на settings.CERTIFICATION_WORKS_ROOT и это будет работать

Вернуться на верх