Как проверить команды нажатия, которые ожидают файлы - PullRequest
1 голос
/ 24 сентября 2019

У меня есть команда click, которая делает что-то с файлом:

import click

@click.command()
@click.argument("file", type=click.File("r"))
def foo(file):
    print(file.read())

И я бы хотела проверить это, не создавая временные файлы, но я не знаю, какой путь дать бегуну ине могу найти примеры в Интернете.Что-то вроде этого было бы неплохо:

from click.testing import CliRunner

from magic_lib import magic_file

def test_foo():
    runner = CliRunner()
    fake_file = magic_file("Hello, world!")
    result = runner.invoke(foo, [fake_file.location])
    assert result.output == "Hello, world!\n"

Любой способ заставить click.File понять, куда я хочу это посмотреть?

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете использовать pyfakefs .Использование зависит от вашей среды тестирования;его проще всего использовать с pytest , поскольку он автоматически обеспечивает fs приспособление:

def test_foo(fs):
    fake_file = fs.create_file('/foo/bar', contents="Hello, world!")

    runner = CliRunner()
    result = runner.invoke(foo, [fake_file.path])
    assert result.output == "Hello, world!\n"

PS: поскольку print в foo добавляет новую строку, файл долженбыть созданным без \n в конце теста для работы.

...