我有一个使用ElasticSearch来获取数据的API。我必须为此编写测试用例。这些测试将使用Circle CI运行。当我们在Circle CI的测试用例上运行测试用例时,测试失败,因为在Circle CI上未安装ElasticSearch。
现在,我们想模拟ElasticSearch以便成功执行测试。问题在于我们必须编写API的测试用例,而在我们的测试中,我们使用单元测试请求来调用API。但是我们想模拟在我们的API中访问的ElasticSearch。我们试图通过直接调用我们的视图来运行测试用例,但是它不起作用。下面是我们的代码。
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中模拟我们的功能?