django - Haystack 与 Elasticsearch : Unit test gets different results when run in isolation

标签 django unit-testing elasticsearch django-haystack

我有两个不同的测试,当与其他测试一起运行时,两个测试都失败了。我将在这里展示其中之一。此测试用于测试同义词是否有效。我的 synonym.txt 文件中有以下同义词:

knife, machete
bayonet, dagger, sword

单元测试如下所示:

def test_synonyms(self):
    """
    Test that synonyms are working
    """
    user = UserFactory()
    SubscriberFactory.create(user=user)
    descriptions = [
        'bayonet',
        'dagger',
        'sword',
        'knife',
        'machete'
    ]
    for desc in descriptions:
        ListingFactory.create(user=user,
                              description="Great {0} for all of your undertakings".format(desc))

    call_command('update_index', settings.LISTING_INDEX, using=[settings.LISTING_INDEX])

    self.sqs = SearchQuerySet().using(settings.LISTING_INDEX)

    self.assertEqual(self.sqs.count(), 5)
    # 3 of the 5 are in one group, 2 in the other
    self.assertEqual(self.sqs.auto_query('bayonet').count(), 3)
    self.assertEqual(self.sqs.auto_query('dagger').count(), 3)
    self.assertEqual(self.sqs.auto_query('sword').count(), 3)
    # 2 of the 5 in this group
    self.assertEqual(self.sqs.auto_query('knife').count(), 2)
    self.assertEqual(self.sqs.auto_query('machete').count(), 2)

问题是,当我使用命令 ./manage.py test AnalyzersTestCase.test_synonyms 单独运行测试时,它工作正常。但是如果我将它与其他测试一起运行,它就会失败,返回 1 个结果,而它应该返回 3。如果我此时运行原始的 elasticsearch 查询,elasticsearch 将返回 1 个结果。所以它一定是索引设置中的某些内容...但我正在删除 setup() 方法中的索引,所以我不知道它在独立运行时如何处于不同的状态与其他测试一起进行。

您能提供的任何帮助都会很棒。

最佳答案

明白了...

Haystack 的连接单例需要在测试之间清除,因此:

import haystack
for key, opts in haystack.connections.connections_info.items():
    haystack.connections.reload(key)
call_command('clear_index', interactive=False, verbosity=0)

关于django - Haystack 与 Elasticsearch : Unit test gets different results when run in isolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569583/

相关文章:

python - Django 时区 : How to compare time difference in days between 2 days across DST

python - 陷入 Django 南迁移 - TransactionManagement 错误

elasticsearch - 在Elasticsearch中创建索引并加载数据后,是否可以定义映射?

c# - 从1.x升级后,在Nest/Elastic Search 2.x中创建索引

elasticsearch - ElasticSearch:如何在ElasticSearch中使用IN等效运算符

python - DJango 包含不适用于 JSONField

python - 从 PostgreSQL 获取数据到 Django 并以 html 显示

java - 无法在 Jmockit 中使用通用返回类型模拟接口(interface)

python - 如何断言引发了 HTTP 异常?

unit-testing - WP7-ViewModel单元测试