作为学习 Symfony2 的一部分,我正在尝试编写一个非常简单的控制台命令,它只运行 phpcs(PHP 代码嗅探器)。
这是扩展 ContainerAwareCommand 的类中的执行函数:
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('<info>Generating PHP Code Sniffer report...</info>');
exec('phpcs ./src > ./app/logs/phpcs.log');
if ($input->getOption('noprompt') == null) {
$dialog = $this->getHelperSet()->get('dialog');
if ($dialog->askConfirmation($output, '<question>Open report in TextMate? (y/n)?</question>', false)) {
exec('mate ./app/logs/phpcs.log');
}
}
$output->writeln('<info>...done</info>');
}
我可以通过运行来执行控制台命令
app/console mynamespace:ci:phpcs
它工作得很好。输出文件按预期生成。
我正在尝试使用以下函数(它是 PHPUnit_Framework_TestCase 的一部分)测试 mynamespace:ci:phpcs 命令:
public function testExecute()
{
$kernel = new \AppKernel("test", true);
$kernel->boot();
$application = new Application($kernel);
$application->add(new PhpCodeSnifferCommand());
$command = $application->find('mynamespace:ci:phpcs');
$commandTester = new CommandTester($command);
$commandTester->execute(array('command' => $command->getName()));
// ... Test if output file was created here ... ommitted for brevity ... //
}
但是,当尝试通过单元测试执行它时,它会失败并显示以下输出:
sh: phpcs: command not found
有谁知道为什么会这样?
PS:我确实观察到的一件事是,当我注释掉命令中调用“exec”的行时,测试会运行(没有通过,但没有抱怨 phpcs 不存在),所以问题肯定出在执行命令。
PHPUnit 测试是否以其他用户身份运行,而 phpcs 不可用?