tat*_*nji 4 python command-line-interface pytest python-click
我正在使用 click v8.1.3 并尝试创建一些 pytests,但return_value在使用时没有达到我的预期click.testing.CliRunner().invoke
import click.testing
import mycli
def test_return_ctx():
@mycli.cli.command()
def foo():
return "Potato"
runner = click.testing.CliRunner()
result = runner.invoke(mycli.cli, ["foo"])
assert result.return_value == "Potato" # this fails. b/c the actual value is None
Run Code Online (Sandbox Code Playgroud)
我尝试更新 root 命令以返回一些随机值,看看我们是否在那里得到一个值
# mycli
import click
@click.group()
def cli():
return "Potato"
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。return_value因为Result物体仍然是None
我是否误解了如何从命令返回值?
https://click.palletsprojects.com/en/8.1.x/api/#click.testing.Result.return_value
单击命令处理程序不会返回值,除非您使用:standalone_mode=False。您可以在测试期间执行此操作,例如:
result = CliRunner().invoke(foo, standalone_mode=False)
Run Code Online (Sandbox Code Playgroud)
import click
from click.testing import CliRunner
def test_return_value():
@click.command()
def foo():
return "bar"
result = CliRunner().invoke(foo, standalone_mode=False)
assert result.return_value == "bar"
Run Code Online (Sandbox Code Playgroud)
============================= test session starts ============================
collecting ... collected 1 item
test_code.py::test_return_value PASSED [100%]
============================== 1 passed in 0.03s ==============================
Run Code Online (Sandbox Code Playgroud)