加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django haystack测试

发布时间:2020-12-20 13:51:46 所属栏目:Python 来源:网络整理
导读:我试图测试我的搜索视图正确地从我的搜索中呈现结果,但是,搜索使用我的实时数据库中的索引而不是我的测试数据库,所以当我为我的测试用例创建一些对象时,它们没有反映在搜索页面. 如何让haystack使用搜索数据库的索引,或者更好的是,只是伪造它而不是使用索引,
我试图测试我的搜索视图正确地从我的搜索中呈现结果,但是,搜索使用我的实时数据库中的索引而不是我的测试数据库,所以当我为我的测试用例创建一些对象时,它们没有反映在搜索页面.

如何让haystack使用搜索数据库的索引,或者更好的是,只是伪造它而不是使用索引,而是按原样使用数据库.对于那个测试用例来说这很好,可能更快.

谷歌搜索时我似乎只能找到这篇文章:http://reliablybroken.com/b/2012/12/testing-django-haystack-whoosh/
它不适用于当前版本.

Pip versions:
django==1.7.5
django-haystack==2.4.0

解决方法

我在我们的项目中遇到过类似的用例.这是我们实施的粗略概念.请注意,如果您使用simple_backend(SB),您的一些自定义过滤器/准备方法 may not work as expected.因此,即使在测试模式下,建议使用非SB后端(例如弹性搜索).

from django.core.urlresolvers import reverse
from django.test import TestCase
from django.test.utils import override_settings

from haystack import connections
from haystack.utils.loading import ConnectionHandler,UnifiedIndex

from myapp.models import MyModel
from myapp.search_indexes import MyModelIndex


TEST_INDEX = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine','URL': 'http://127.0.0.1:9200/','INDEX_NAME': 'test_index',},}


@override_settings(HAYSTACK_CONNECTIONS=TEST_INDEX )
class SearchViewTest(TestCase):
    def setUp(self):
        """
        Some ideas taken from here:
        https://github.com/django-haystack/django-haystack/blob/v2.6.0/test_haystack/test_views.py#L40
        """
        connections = ConnectionHandler(TEST_INDEX )
        super(SearchViewTest,self).setUp()

        self.mm = MyModel.objects.create(name='Dummy Title')

        # Stow.
        self.old_unified_index = connections['default']._index
        self.ui = UnifiedIndex()
        self.mmi = MyModelIndex()
        self.ui.build(indexes=[self.mmi])
        connections['default']._index = self.ui

        # Update the 'index'.
        backend = connections['default'].get_backend() 
        backend.clear()
        backend.update(self.mmi,MyModel.objects.all())

    def tearDown(self):
        connections['default']._index = self.old_unified_index
        super(SearchViewTest,self).tearDown()

    def test_search_results(self):
        response = self.client.get('/search?q=dummy')
        self.assertIn(self.mm.name,response)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读