python – Django 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)
标签:python,django,testing,django-haystack 来源: https://codeday.me/bug/20190708/1399445.html