Я пытаюсь протестировать некоторые маршруты в моем приложении Flask, которые вызывают внешние API, которые я хочу смоделировать.
Маршруты настроены так:
@app.route('/url/<string::arg>')
def route_function(arg):
data = external_api(arg)
response = make_response(data)
# configure response
return response
Я изначально пробовал что-то вроде этого:
class TestFlaskApp(unittest.TestCase):
def setUp(self):
self.app = app.test_client()
@patch('external_api',
side_effect=mock_api)
def test_flask_route(self, api):
result = app.get('/url/arg')
self.assertEqual(result.status_code, 200)
api.assert_called_once_with('arg')
..., что не удалось.Функция фиктивного API не была вызвана, так как я предполагаю, что имитация не применяется в контексте приложения.
Я также попробовал это, подумав, что я мог бы напрямую протестировать функции маршрута и, таким образом, избежать необходимости использоватьконтекст приложения:
class TestAppFunctions(unittest.TestCase):
@patch('external_api',
side_effect=mock_api)
def test_flask_function(self, api):
result = my_flask_app.route_function('arg')
self.assertEqual(result.status_code, 200)
api.assert_called_once_with('arg')
... но это тоже не сработало, поскольку для ответа route_function
нужен контекст приложения.
Так что есть способиздеваться в контексте приложения?Как еще я могу проверить эти маршруты, не вызывая внешние вызовы API?