Я не уверен, что этот ответ подойдет вашим требованиям, но я бы попытался решить эту проблему. К сожалению, если вы хотите использовать интерфейс CLI по умолчанию во Flask, вам нужно вызвать create_app
просто для вызова flask test
команды. Что вы можете сделать, это попробовать использовать pytest
. Это позволяет создавать приборы, которые можно использовать в нескольких тестовых случаях. Например, в вашем пакете tests
создайте файл с именем conftest.py
и объявите некоторые приборы по умолчанию, например:
@pytest.fixture
def app():
return create_app('testing')
@pytest.fixture
def client(app):
return app.test_client()
@pytest.fixture
def database(app):
_db.app = app
with app.app_context():
_db.create_all()
yield _db
_db.session.close()
_db.drop_all()
Затем в вашем файле тестового примера (например, test_login.py) вы можете использовать эти приборы следующим образом:
# Notice argument names are the same as name of our fixtures
# You don't need to import fixtures to this file - pytest will
# automatically recognize fixtures for you
def test_registration(app, client):
response = client.post(
'/api/auth/login',
json={
'username': 'user1',
'password': '$dwq3&jNYGu'
})
assert response.status_code == 200
json_data = response.get_json()
assert json_data['access_token']
assert json_data['refresh_token']
Лучшим в этом подходе является то, что вам не нужно создавать методы setUp
и tearDown
. Затем вы можете создать команду test
cli для своего приложения:
import pytest
@app.cli.command()
def test():
'''
Run tests.
'''
pytest.main(['--rootdir', './tests'])
И назовите это так flask test
.