Класс FlaskCliRunner
Класс FlaskCliRunner применяется для тестирования
пользовательских CLI-команд, зарегистрированных в
приложении Flask. Он изолирует выполнение команды,
перехватывает вывод и позволяет проверить результат
без запуска отдельного процесса в терминале. Объект
создаётся через метод test_cli_runner приложения,
который автоматически передаёт в конструктор нужное
приложение и настройки.
Основным методом класса является invoke. Первым
параметром он принимает объект команды или её имя,
а вторым - список аргументов командной строки. Метод
возвращает объект Result с атрибутами
exit_code, output и exception, по которым
проверяют успешность выполнения команды.
Синтаксис
runner = app.test_cli_runner()
res = runner.invoke(command, args, input=None)
Пример
Давайте создадим простое приложение с CLI-командой и протестируем её вывод:
from flask import Flask
app = Flask(__name__)
@app.cli.command('hello')
def hello():
print('hello')
Теперь напишем тест, который вызывает эту команду
через FlaskCliRunner:
from app import app
runner = app.test_cli_runner()
res = runner.invoke(args=['hello'])
print(res.exit_code)
print(res.output)
Результат выполнения кода:
0
"hello\n"
Пример
Давайте передадим аргумент в CLI-команду и проверим её работу:
from flask import Flask
import click
app = Flask(__name__)
@app.cli.command('greet')
@click.argument('name')
def greet(name):
print('hello ' + name)
Теперь вызовем команду с аргументом 'user':
from app import app
runner = app.test_cli_runner()
res = runner.invoke(args=['greet', 'user'])
print(res.exit_code)
print(res.output)
Результат выполнения кода:
0
"hello user\n"
Пример
Давайте проверим команду, которая завершается с ошибкой, и посмотрим на код выхода:
from flask import Flask
import click
app = Flask(__name__)
@app.cli.command('fail')
def fail():
raise click.ClickException('something wrong')
Теперь вызовем команду fail и проверим
exit_code:
from app import app
runner = app.test_cli_runner()
res = runner.invoke(args=['fail'])
print(res.exit_code)
print(res.output)
Результат выполнения кода:
1
"Error: something wrong\n"
Смотрите также
-
класс
FlaskClient,
который тестирует HTTP-запросы к приложению -
метод
invoke,
который запускает CLI-команду в тесте -
атрибут
application,
который хранит тестируемое приложение -
класс
TestResponse,
который представляет ответ тестового клиента