2016-11-05 26 views
3

CliRunner列出了沒有參數在其documentation中提供上下文。如何將ctx(上下文)傳遞給CliRunner?

以下內容應被視爲最低工作示例。 真正的問題有點不同。 可以通過將點擊裝飾功能移動到其自己的功能來解決測試覆蓋問題。然後,點擊功能將變得幾乎無用。

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' 

回答

2

您將直接通過您的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' 
相關問題