У нас есть приложение Flask, в котором основная часть кода установки Flask находится в файле run.py
в корне нашего приложения. Так что в основном этого много:
app = Flask(__name__)
app.debug = True
app.config(...)
app.config(...)
api = Api(app)
api.add_resource(resources.Registration, '/registration')
api.add_resource(...)
api.add_resource(...)
Я пытаюсь добавить к нему юнит-тестирование, которого у нас сейчас нет. Я примерно следую учебному проекту Flask (https://github.com/pallets/flask/tree/1.0.2/examples/tutorial) в качестве примера.
Таким образом, в основном вы создаете все приложение как модуль, который можно импортировать, и этот модуль является заводским. Так что __init__.py
имеет функцию create_app
, которая создает ваше приложение (https://github.com/pallets/flask/blob/1.0.2/examples/tutorial/flaskr/init.py). Я думаю, это вызывается автоматически, когда модуль импортируется основным приложением во время нормальной работы, но также может быть явно вызвано в conftest. py (https://github.com/pallets/flask/blob/1.0.2/examples/tutorial/tests/conftest.py), который, я думаю, (?) автоматически вызывается как часть запуска pytest
.
Так что мой вопрос на самом деле довольно прост: есть ли приличный способ запустить несколько pytest
тестов без рефакторинга кода нашего основного приложения в заводской модуль? Я не хочу слишком сильно трогать основное приложение ... Я бы хотел оставить его как очень простую настройку, как мой код, в верхней части этого вопроса.
Другими словами, это базовая настройка приложения в conftest.py
руководства после удаления содержимого БД:
@pytest.fixture
def app():
app = create_app({
'TESTING': True,
'DATABASE': db_path,
})
yield app
И я хочу app
без create_app
. Но так как весь наш код приложения находится только в нашем базовом run.py
, я не могу придумать хорошего способа сделать это, кроме копирования всего и поддержания его в синхронизации. Я не могу импортировать app
из run.py
, так как это не модуль, я не думаю.
Извините, что это так просто - ни тестирование, ни операторы импорта не являются моими сильными сторонами.