【问题标题】:Haystack with Elasticsearch: Unit test gets different results when run in isolation使用 Elasticsearch 的 Haystack:单独运行时单元测试会得到不同的结果
【发布时间】:2014-05-09 16:25:15
【问题描述】:

我有两个不同的测试,并且在与其他测试一起运行时都失败了。我将在这里展示其中之一。此测试用于测试同义词是否有效。我的 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 单独运行测试时,它工作正常。但是,如果我将它与其他测试一起运行,它会失败,在应该返回 3 的地方返回 1 个结果。如果我在那时运行原始 elasticsearch 查询,elasticsearch 返回 1 个结果。所以它必须是索引设置中的某些东西......但是我在 setup() 方法中删除了索引,所以我看不出它在运行时与运行时隔离时如何处于不同状态与其他测试一起。

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

【问题讨论】:

    标签: django unit-testing elasticsearch django-haystack


    【解决方案1】:

    想通了……

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2019-10-31
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多