Невозможно смоделировать функцию REST API с помощью Python Mock в Django - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть API, который использует ElasticSearch для получения данных. Я должен написать контрольные примеры для этого. Эти тесты будут выполняться с использованием Circle CI. Когда мы запускаем тестовые наборы для тестовых наборов на Circle CI, тест не пройден, поскольку ElasticSearch не установлен на Circle CI.

Теперь мы хотим смоделировать ElasticSearch, чтобы успешно выполнить тесты. Проблема в том, что мы должны писать тестовые случаи для API, и в наших тестах мы вызываем API с помощью запросов на модульное тестирование. Но мы хотим высмеять ElasticSearch, доступ к которому осуществляется через наш API. Мы попытались запустить наши тесты, напрямую вызвав наше представление, но это не работает. Ниже приведен наш код.

test.py

class Test_api(TestCase):
    @mock.patch("src.chart.views.MyView.my_function_to_mock", MagicMock(return_value='return value'))
    def setUp(self):
        self.user = User.objects.create_user('foo', 'foo@bar.de', 'bar')
        self.request = APIRequestFactory()

    def test_my_api(self):
        view = MyView.as_view()
        request = self.request.get('/api/abc/')
        force_authenticate(request, user=self.user)
        response = view(request)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, 'return value')

view.py

 class MyView(views.APIView):
     permission_classes = [permissions.IsAuthenticated, ]
     def my_function_to_mock(self):
        g_es = Elasticsearch(hosts='myhost', timeout='100')
        res = g_es.search(
            index='myindex',
            body=dumps({"query": {"match_all": {}}}))
     return res

Структура каталогов:

-src
    |-chart
        |-tests
            |-test_case.py
        |-views.py

Когда мы запускаем этот тестовый пример, наша необходимая функция не подвергается насмешкам. Может ли кто-нибудь подсказать нам, как мы можем смоделировать нашу функцию в нашем Rest API?

...