3

为了更快地运行我的测试,我在这个答案中创建了一个无数据库测试运行器。然后我需要将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 仍然会创建数据库,这当然不是预期的行为。奇怪的是,如果我TEST_RUNNER直接在我的中设置settings.py它可以完美地工作,但django.test.utils.override_settings它似乎没有任何效果。我也尝试使用这个 override_settings 模块,但得到了相同的结果。

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

4

1 回答 1

2

将这段代码放入您的配置中:

TESTING = 'test' in sys.argv

...

if TESTING:
    TEST_RUNNER = 'path_to_my_no_db_test_runner'
    DATABASES = {}

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

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

于 2015-11-09T14:45:37.843 回答