Domanda

Come parte dell'apprendimento di Symfony2, sto cercando di scrivere un comando console molto semplice che esegue semplicemente PHPCS (codice PHP Sniffer).

Ecco la funzione Execute che si trova in una classe che estende il 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>');
}

Sono in grado di eseguire il comando console eseguendo

app/console mynamespace:ci:phpcs

E funziona perfettamente. Il file di output viene generato come previsto.

Sto cercando di testare il comando MyNamespace: CI: PHPCS usando la seguente funzione (che fa parte di un phpunit_framework_testcase):

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 ... //
}

Tuttavia, quando si tenta di eseguirlo tramite il test dell'unità, non riesce con il seguente output:

sh: phpcs: command not found

Qualcuno ha un'idea del perché sta accadendo?

PS: Una cosa che ho osservato è stata che quando commenta le righe nel comando che chiamano "Exec" il test è passato (non passando, ma non gemendo che i PHPC non esistano), quindi il problema è sicuramente con il comandi esec.

I test PHPUNIT vengono eseguiti come un utente diverso, in cui PHPCS non è disponibile?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top