Как издеваться над elasticsearch.helpers.bulk

#python-3.x #unit-testing #elasticsearch #mocking

#python-3.x #модульное тестирование #elasticsearch #издевательство

Вопрос:

Я тестирую класс, который использует bulk для индексации некоторых документов.

Вот мой код:

 import mock
import unittest
import json

from elasticsearch.helpers import bulk

from ingestion.ingestor import Ingestor

class TestIngestor(unittest.TestCase):

    def setUp(self):
        self.ingestor = Ingestor()

    @mock.patch("elasticsearch.helpers.bulk", mock.MagicMock(return_value=True))
    def test_ingestor(self):
        with open("tests/data/sample_payload.json", "r") as reader:
            sample_messages = json.loads(reader.read())["Messages"]

        actions = self.ingestor.ingest(sample_messages)

        self.assertEqual(len(actions), 10)
  

Однако, похоже, что издевательство не работает … когда я запускаю его, я получаю длинный список ошибок отказа в подключении.

Как мне это исправить?

Ответ №1:

Оказывается, мой патч был неправильным… Вот как я это исправил:

 @mock.patch("elasticsearch.Elasticsearch.bulk", 
             mock.MagicMock(return_value={"items":[]}))
  

Комментарии:

1. Сталкивался с похожими проблемами при издевательстве над этой библиотекой. Довольно сложно получить правильные пути из-за того, как импортируются модули (даже больше с _async ресурсами). Допустим, я использую from elasticsearch.helpers import async_bulk каким будет путь?