在 PHPUnit 测试中将控制台命令选项传递给 Symfony CommandTester

4

我配置了一个如下的Symfony控制台命令:

protected function configure()
{
    $this
       ->setName('crmpiccobundle:list:sync')
       ->setDescription('Sync users to the list')
       ->addOption(
       'filepath',
       null,
       InputOption::VALUE_OPTIONAL,
       'The path to the file',
       null
    )
    ;
}

我有一个关于IT技术的问题需要翻译,以下是需要翻译的内容:

...而且我有一个PHPUnit测试,如下所示:

public function testExecuteWhenFileIsEmpty()
{
    self::bootKernel();

    $application = new Application(self::$kernel);

    $application->add(new Sync());

    $command = $application->find('crmpiccobundle:list:sync');

    $commandTester = new CommandTester($command);
    $commandTester->execute([
        'command' => $command->getName(),
        'filepath' => '/tmp/crmpicco.co.uk.csv'
    ]);
}

当我运行它时,出现以下错误:
InvalidArgumentException: "filepath"参数不存在。
我的问题是 - 我如何将一个选项传递给CommandTester?传递参数很好,但我找不到有关如何为选项做到这一点的文档。

1
你尝试过使用 '--filepath' => '/tmp/crmpicco.co.uk.csv' 吗? - Matteo
1
@Matteo 谢谢,那就是答案。请随意提交,我会很乐意接受。干杯。 - crmpicco
1个回答

14

你应该使用 -- 将选项传递进去,所以尝试这样做:

$commandTester->execute([
    'command' => $command->getName(),
    '--filepath' => '/tmp/crmpicco.co.uk.csv'
]);

不要这样写:

$commandTester->execute([
    'command' => $command->getName(),
    'filepath' => '/tmp/crmpicco.co.uk.csv'
]);

希望这可以帮到你


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接