2017-06-04 12 views
2

私はクリックコマンドは、一連のファイルをダウンロードする前に、ユーザのユーザ名とパスワードを要求しますdownloadを求めている:Click:CliRunner.invokeに複数の入力を渡すことは可能ですか?

$ python download.py 
Username: jkarimi91 
Password: 1234 
Download complete! 

このコマンドをテストするために、私はusernamepasswordの両方に合格できるようにする必要があります別途、stdinに変更します。 CliRunner.invoke()メソッドはinput引数を持ちますが、リストを受け入れません。 CliRunner.invoke()に複数の入力を渡すことはできますか?

+0

@StephenRauch、 'input'引数、ない' input'方法。クリックドキュメントの[Input Streams](http://click.pocoo.org/5/testing/#input-streams)を参照してください。 – falsetru

+0

私の間違いは、私はタイプミスを犯しましたが、その後修正しました。 inputはclirunner – jkarimi

答えて

1

あなたは改行(\n)によって接合された文字列を渡すことによって、複数の入力を渡すことができ:

import click 
from click.testing import CliRunner 


def test_prompts(): 
    @click.command() 
    @click.option('--username', prompt=True) 
    @click.option('--password', prompt=True) 
    def test(username, password): 
     # download .. 
     click.echo('Download complete!') 

    # OR 
    # 
    # @click.command() 
    # def test(): 
    #  username = click.prompt('Username') 
    #  password = click.prompt('Password', hide_input=True) 
    #  # download .. 
    #  click.echo('Download complete!') 


    runner = CliRunner() 
    result = runner.invoke(test, input='username\npassword\n') # <--- 
    assert not result.exception 
    assert result.output.endswith('Download complete!\n') 


if __name__ == '__main__': 
    test_prompts() 
+0

のinvokeメソッドの引数です。引数として 'username'と' password'を追加せず、 'raw_input()'と 'getpass 'を使って' test() 'の中でそれらを取得しても可能です。代わりにgetpass() '? – jkarimi

+0

@jkarimi、 'click.prompt()'を使うと可能です。私は 'raw_input()'や 'getpass.getpass()'でテストしませんでした。 – falsetru

+1

@jkarimi、私は 'raw_input'、' getpass.getpass'でテストしました。 'raw_input'では動作しますが、' getpass.getpass'では動作しません。 'runner.invoke(...、input =)でうまく動作するパスワード入力には、' click.prompt( 'Username') 'と' click.prompt( 'Password'、hide_input = True) ..) ' – falsetru

関連する問題