为了更快地运行我的测试,我创建了一个无数据库测试运行器,如 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 仍然会创建数据库,这当然不是预期的行为。奇怪的是,如果我直接在我的 settings.py
中设置 TEST_RUNNER
它会完美运行,但是使用 django.test.utils.override_settings
它似乎没有效果。我也尝试使用 this override_settings module但得到了相同的结果。
我 dping 哪里错了?还有其他方法可以实现这一目标吗?我不想创建 test_settings.py
并使用 --settings
参数运行我的测试。
最佳答案
将这段代码放入你的配置中:
TESTING = 'test' in sys.argv
...
if TESTING:
TEST_RUNNER = 'path_to_my_no_db_test_runner'
DATABASES = {}
TESTING
设置只会在您运行测试时定义,然后您可以动态更改一些设置,包括您的数据库、迁移、测试运行器...
它将在 Django 初始化的最开始加载,因此如果您覆盖 DATABASES
,则不会创建 DB。
关于django - 使用@override_settings 覆盖 TEST_RUNNER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725128/