2016-11-05 2 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 экземпляр в качестве ключевого слова аргумент obj к runner.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' 
Смежные вопросы