gpt4 book ai didi

python - 如何将 ctx(上下文)传递给 CliRunner?

转载 作者:行者123 更新时间:2023-12-04 18:59:44 25 4
gpt4 key购买 nike

CliRunner在其 documentation 中没有列出提供上下文的参数.

以下应作为最低限度的工作示例。
真正的问题有点不同。
可以通过将 click 装饰函数移动到它自己的测试覆盖函数中来解决。然后点击功能将变得几乎无用。

import click
from click.testing import CliRunner

class Config():
def __init__(self):
self.value = 651

@click.command()
@click.pass_context
def print_numberinfo(ctx):
if not hasattr(ctx.obj, 'value'):
ctx.obj = Config()
click.echo(ctx.obj.value)

def test_print_numberinfo():
ctx = click.Context(print_numberinfo, obj = Config())
ctx.obj.value = 777
runner = CliRunner()
# how do I pass ctx to runner.invoke?
result = runner.invoke(print_numberinfo)
assert result.output == str(ctx.obj.value) + '\n'

最佳答案

您将直接通过您的 Config实例作为关键字参数 objrunner.invoke :

import click
from click.testing import CliRunner

class Config():
def __init__(self):
self.value = 651

@click.command()
@click.pass_obj
def print_numberinfo(obj):
if not hasattr(obj, 'value'):
obj = Config()
click.echo(obj.value)

def test_print_numberinfo():
obj = Config()
obj.value = 777
runner = CliRunner()
# how do I pass ctx to runner.invoke?
result = runner.invoke(print_numberinfo, obj=obj)
assert result.output == str(obj.value) + '\n'

关于python - 如何将 ctx(上下文)传递给 CliRunner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com