单击:在没有 运行 代码的情况下测试 click.group 命令

Click: Test click.group commands without running their code

我目前正在为我的应用程序编写测试,因此,我必须测试我定义的一些 click.group 命令:

假设我将它们定义为:

@click.group(cls=MyGroup)
@click.pass_context
def myapp(ctx):
    init_stuff()    

@myapp.command()
@click.option('--myOption')
def foo(myOption: str) -> None:
    do_stuff() # change some files, print, create other files

我知道我可以使用 CliRunner from click.testing。但是,我只想确保调用了该命令,但我不想让它执行任何代码(例如通过应用 CliRunner.invoke())。

这是怎么做到的? 例如,我无法想出使用 foo 模拟的解决方案。或者我是否必须使用 CliRunner 提供的 isolated_filesystem() 来执行代码?

所以问题是:当如上所示定义时,测试我的命令的最有效方法是什么?

非常感谢

您可以为您的组或一些命令添加一个--dry-run标志,并将其保存在上下文中,如果启用该标志,则不要执行任何代码。然后,您可以在启用 --dry-run 标志的情况下使用 CliRunner.invoke(),只需检查您的调用是否已发生,而无需实际执行代码。