У меня есть приложение Flask
:
myapp.py:
def create_app():
app = Flask(__name__)
return app
app = create_app()
session = session_factory()
def connect_db():
engine = get_engine()
return engine.connect()
@app.route("/")
def hello():
return "Hello everyone"
Я хочу написать несколько тестов pytest, поэтому я создал два файла:
conftest.py:
import pytest
from app.myapp import create_app
@pytest.fixture
def app():
app = create_app()
return app
@pytest.fixture
def client(app):
return app.test_client()
@pytest.fixture
def runner(app):
return app.test_cli_runner()
test_endpoints.py
import pytest
from flask import *
def test_hello(client):
response = client.get("/")
assert response.data == b'Hello everyone'
Когда я запускаю pytest, я получаю эту ошибку:
> assert response.data == b'Hello everyone'
E assert '<!DOCTYPE HT... again.</p>\n' == 'Hello everyone'
E + Hello everyone
E - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
E - <title>404 Not Found</title>
E - <h1>Not Found</h1>
E - <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
Почему pytest
не может найти конечную точку? Что я могу добавить здесь, чтобы он работал?
Вы не добавляете какие-либо маршруты в app
вы получаете от create_app()
в вашем устройстве.
Если вы считаете свой код
def create_app():
app = Flask(__name__)
return app
app = create_app()
# ...
@app.route("/")
def hello():
return "Hello everyone"
что hello
маршрут добавляется только в этот экземпляр глобального app
, а не тот, который вы приобрели из прибора.
Учебник Flask, который охватывает тестирование, использует чертежи для монтирования путей в функции create_app
. Возможно, вы тоже захотите сделать это; что-то вроде этого.
bp = Blueprint('greetings', __name__)
@bp.route("/")
def hello():
return "Hello everyone"
def create_app():
app = Flask(__name__)
app.register_blueprint(bp)
return app