2016-11-05 2 views
3

CliRunner listet keinen Parameter auf, um in seinem documentation einen Kontext bereitzustellen.Wie kann ich einen CTX (Kontext) an CliRunner übergeben?

Folgendes sollte als funktionierendes Beispiel gelten. Das eigentliche Problem ist ein bisschen anders. Es könnte gelöst werden, indem die click dekorierte Funktion in eine eigene Funktion für die Testabdeckung verschoben wird. Dann wäre die Klickfunktion fast nutzlos.

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' 

Antwort

2

Sie würden direkt Ihre Config Instanz als Keyword-Argument obj-runner.invoke passieren:

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' 
Verwandte Themen