5

我有一个单击命令download,它会在下载一系列文件之前提示用户输入用户名和密码:

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

要测试这个命令,我需要能够将 ausername和 apassword分别传递给stdin. 该CliRunner.invoke()方法有一个input参数,但它不接受列表。是否可以将多个输入传递给CliRunner.invoke()

4

1 回答 1

5

您可以通过传递由换行符 ( ) 连接的字符串来传递多个输入\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()
于 2017-06-04T03:30:55.273 回答