php - 验证 Symfony 4 单元测试中的命令独白输出

标签 php unit-testing command symfony4 monolog

https://symfony.com/doc/current/console.html#testing-commands 用户可以了解如何使用单元测试来测试命令。

问题是,按照此过程,无法测试通过 Monolog 生成的控制台输出。

$output = $commandTester->getDisplay();
# Returns ''

因此 $output 上的所有断言都是 false。

有人知道如何在 Symfony 4 中的 Symfony 命令中对 Monolog 输出进行单元测试吗?

最佳答案

我已经通过在 monolog“config/packages/test/monolog.yaml”中添加 TestHandler 来测试 Monolog 输出

monolog:
    handlers:
        test:
            type: test
            level: debug

这是我的 TestClass 中的代码

class MyClassCommandTest extends KernelTestCase
{
    /**
     * First validation tests all invalid options
     */
    public function testMyCommand()
    {
        $kernel = static::createKernel();
        $application = new Application($kernel);

        $command = $application->find('my:command:name');
        $commandTester = new CommandTester($command);

        $options['command'] = $command->getName();
        $commandTester->execute([
            'option_name' => 'value'
        ], [
            'verbosity' => OutputInterface::VERBOSITY_VERY_VERBOSE
        ]);

        //I injected the logger inside my command and added a function getLogger to access it
        $logger = $command->getLogger();
        $handlers = $logger->getHandlers();

        $logs = null
        foreach ($handlers as $handler) {
            if ($handler instanceof TestHandler) {
                $logs = $handler;
            }
        }

        $this->assertTrue($logs->hasRecordThatContains('ERROR_STRING_1', Logger::ERROR), 'Missing Error');
        $this->assertTrue($logs->hasRecordThatContains('CRITICAL_STRING_1', Logger::CRITICAL), 'Missing Critical Error');
        $this->assertFalse($logs->hasRecordThatContains('SUCCESS_STRING_1', Logger::INFO), 'Has Success Message');
    }
}

有人对如何验证输出有任何其他建议吗?

关于php - 验证 Symfony 4 单元测试中的命令独白输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53435318/

相关文章:

javascript - 联系表 7 - 提交时设置 Cookie

php - 将下拉选择的值拆分为两个变量? (PHP/HTML)

php - 在 Select HTML 中显示 MySQL 字段的所有记录

php - MySQL日期转换(“01/Jan/2015”到 “01012015”)

python - 执行内容协商的模拟 HTTP 服务器

unit-testing - 如何测试以文件夹为输入的 HTTP 函数?

java - 使用bat命令永久设置java环境变量值

macos - rvm:未找到命令 MAC OX

java - 如何使用 mockito 获取位图资源?

linux - Linux中/etc/passwd文件最后一行获取用户ID