为了更快地运行我的测试,我在this answer中创建了一个无数据库测试运行器。然后我需要将TEST_RUNNER
设置变量设置为我的新测试运行器,但仅适用于某些测试。为实现这一目标,我尝试使用django.test.utils.override_settings
这样的装饰器(如docs中所示):
from django.test import TestCase
from django.test.utils import override_settings
class MyTestCase(TestCase):
@override_settings(TEST_RUNNER='path_to_my_no_db_test_runner')
def test_my_test_case(self):
...
问题在于,当我运行此测试时,django仍会创建数据库,这当然不是预期的行为。奇怪的是,如果我将TEST_RUNNER
直接设置在我的settings.py
中,它可以完美地运行,但是django.test.utils.override_settings
似乎没有效果。我也尝试使用this override_settings module但得到了相同的结果。
我错了什么?有没有其他方法来实现这一目标?我宁愿不创建test_settings.py
并使用--settings
参数运行我的测试。
答案 0 :(得分:2)
将这段代码放入配置中:
TESTING = 'test' in sys.argv
...
if TESTING:
TEST_RUNNER = 'path_to_my_no_db_test_runner'
DATABASES = {}
只有在运行测试时才会定义TESTING
设置,然后您可以动态更改某些设置,包括数据库,迁移,测试运行程序......
它将在Django初始化的最开始加载,因此如果覆盖DATABASES
,则不会创建任何DB。