运行测试时,django如何重新定义DJANGO_SETTINGS_MODULE?

时间:2018-12-24 17:15:54

标签: python django

我在项目的根目录中有一个“设置”目录。它包含具有设置的不同文件:

./settings/tests.py
./settings/testing.py
./settings/production.py

我想使用tests.py进行单元测试(我使用testing.py进行预生产应用程序运行),所以。在 manage.py 文件中,我编写了以下代码:

...
if 'test' in sys.argv:
  os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.tests')
else:
  os.environ.setdefault('DJANGO_SETTINGS_MODULE',
                        'settings.production')
...

当我运行python manage.py test <app_name>时,所有测试均正常运行,并且使用了settings / tests.py模块。但是当我运行python manage.py test时,Django会加载settigns / testing.py文件。

当我重命名testing.py文件时,一切都会按我的预期进行:tests.py模块已加载。

在Django中为测试定位测试模块是否有逻辑?如何禁用它?

2 个答案:

答案 0 :(得分:0)

运行测试时,使用--settings标志提供设置:

python manage.py test --settings=your_app_name.settings.tests

这是做到这一点的方法之一。

答案 1 :(得分:0)

问题在于模块是通过“ test *”模式匹配加载的。