Overriding TEST_RUNNER with @override_settings



为了更快地运行我的测试,我创建了一个无数据库测试运行器,如这个答案所示。然后,我需要将TEST_RUNNER设置变量设置为我的新测试运行程序,但仅适用于某些测试。为了实现这一点,我尝试使用这样的装饰器django.test.utils.override_settings如文档中所示):

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它似乎没有效果。我也尝试使用此override_settings模块,但得到了相同的结果。

我做错了什么?还有其他方法可以实现这一点吗?我宁愿不创建一个test_settings.py并使用--settings参数运行我的测试。

把这段代码放在你的配置中:

TESTING = 'test' in sys.argv
...
if TESTING:
    TEST_RUNNER = 'path_to_my_no_db_test_runner'
    DATABASES = {}

TESTING设置仅在运行测试时定义,然后您可以动态更改某些设置,包括数据库、迁移、测试运行程序...

它将在 Django 初始化开始时加载,因此如果您覆盖DATABASES将不会创建任何数据库。

相关内容

  • 没有找到相关文章

最新更新