gpt4 book ai didi

django - 是否可以为某些测试禁用 django haystack?

转载 作者:行者123 更新时间:2023-12-04 12:46:51 27 4
gpt4 key购买 nike

我们使用 django-haystack作为我们的搜索索引。通常很好,但在测试期间,它会增加每个模型对象创建和保存的开销,并且对于大多数测试来说,它不是必需的。所以我想避免它。所以我想我会用 override_settings使用一个什么都不做的假人。但我现在已经尝试了 BaseSignalProcessorSimpleEngine我仍然可以看到我们的搜索索引 (elasticsearch) 受到了很多打击。

我试过的两个版本是:

首先使用SimpleEngine没有数据准备:

from django.test import TestCase
from django.test.utils import override_settings

HAYSTACK_DUMMY_INDEX = {
'default': {
'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
}
}

@override_settings(HAYSTACK_CONNECTIONS=HAYSTACK_DUMMY_INDEX)
class TestAllTheThings(TestCase):
# ...

然后使用 BaseSignalProcessor这应该意味着要保存的信号没有连接:
from django.test import TestCase
from django.test.utils import override_settings

@override_settings(HAYSTACK_SIGNAL_PROCESSOR='haystack.signals.BaseSignalProcessor')
class TestAllTheThings(TestCase):
# ...

我使用 pytest 作为测试运行器,以防万一。

知道我是否遗漏了什么吗?

最佳答案

设置为 only accessed once所以事后覆盖它不会改变任何事情。

相反,您可以将信号处理器子类化并坚持一些逻辑来有条件地禁用它,如下所示:

from django.conf import settings

from haystack.signals import BaseSignalProcessor


class TogglableSignalProcessor(BaseSignalProcessor):
settings_key = 'HAYSTACK_DISABLE'

def handle_save(self, sender, instance, **kwargs):
if not getattr(settings, self.settings_key, False):
super().handle_save(sender, instance, **kwargs)

def handle_delete(self, sender, instance, **kwargs):
if not getattr(settings, self.settings_key, False):
super().handle_delete(sender, instance, **kwargs)

现在,如果您将其配置为信号处理器,那么您可以在测试中轻松禁用它。如果您只是使用 manage.py test,则可以使用环境变量设置设置键。而不是自定义运行者。否则你应该知道把它贴在哪里。
import os

HAYSTACK_DISABLE = 'IS_TEST' in os.environ

并运行它
IS_TEST=1 python manage.py test

对于您希望启用它的少数测试,请使用 override_settings()就像你已经尝试过:
class MyTest(TestCase):
@override_settings(HAYSTACK_ENABLE=True)
def that_one_test_where_its_needed(self):
pass

当然,您可以更进一步,为信号处理器类设置条件设置,因此如果您有一个繁忙的站点,那么我的条件检查不会 slow it down直播的时候。

关于django - 是否可以为某些测试禁用 django haystack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com