Symfony 交互式命令测试以 RuntimeException 结束

Posted

技术标签:

【中文标题】Symfony 交互式命令测试以 RuntimeException 结束【英文标题】:Symfony interactive Command Test ends with RuntimeException 【发布时间】:2016-10-09 03:53:54 【问题描述】:

我正在尝试使用交互式输入来测试我的控制台命令。所以我写了一个函数来改变问题助手的输入流。

protected function getInputStream($input)

    $stream = fopen('php://memory', 'r+', false);
    fwrite($stream, $input);
    rewind($stream);

    return $stream;

这是我失败的代码

public function testRunCommandWithoutArguments()

    self::bootKernel();
    $application = new Application(self::$kernel);
    $application->setAutoExit(false);
    $application->add(new InstallCommand());

    $command = $application->find('app:install');
    $commandTester = new CommandTester($command);
    $helper = $command->getHelper('question');
    /** @var QuestionHelper $helper */
    $helper->setInputStream($this->getInputStream('No\\nNo\\n'));

    $commandTester->execute(array('command' => $command->getName()));

RuntimeException : 中止 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Helper/QuestionHelper.php:135 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Helper/QuestionHelper.php:56 /Users/Ashura/Documents/Projects/CustomFramework/src/AppBundle/Command/InstallCommand.php:96 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:256 /Users/Ashura/Documents/Projects/CustomFramework/vendor/symfony/symfony/src/Symfony/Component/Console/Tester/CommandTester.php:80 /Users/Ashura/Documents/Projects/CustomFramework/tests/AppBundle/Command/InstallCommandTest.php:79

【问题讨论】:

【参考方案1】:

单引号中的\n 不起作用,例如,它们显示在print 中。

'No\\nNo\\n' 更改为"No\nNo\n",它应该可以工作。

另一个我更喜欢:sprintf('No%1$sNo%1$s', PHP_EOL)

【讨论】:

\n 在单引号中不起作用,例如在 print 中显示。 取我给出的确切字符串。您在代码中转义 \\n,您必须编写“No\nNo\n”,如果您的命令不需要超过您提供的两个输入,它将起作用。你的命令有多少问题?包括确认。 非常感谢。我没想到这真的会奏效。有什么我可以阅读的解释吗? 当然***.com/questions/2531969/… 是的,因为您的问题已经包含 \n 我假设您已经知道该命令为单独的每个输入寻找断线。你可以在这里阅读symfony.com/doc/current/components/console/helpers/…

以上是关于Symfony 交互式命令测试以 RuntimeException 结束的主要内容,如果未能解决你的问题,请参考以下文章

配置 Symfony 5.3 以使用专用的 MongoDB 数据库进行测试

以编程方式对用户进行身份验证以进行 PhpUnit 功能测试 - 不受 Doctrine 管理 - Symfony 4.3

如何从控制器运行 symfony 2 运行命令

带有 SQLite 内存数据库的 Symfony / Doctrine UnitTests

如何通过伪造登录来测试 Symfony 2 中的 ACL

Symfony 5,测试条带时得到 403