Helpers y testing de comandos en Symfony

Los helpers permiten customizar los comandos, el testing permite comprobar su funcionamiento para asegurar los outputs

Contenido modificable

Si ves errores o quieres modificar/añadir contenidos, puedes crear un pull request. Gracias

Helpers

El componente Console también tiene una serie de helpers, pequeñas herramientas que pueden ayudarte en diferentes tareas:

Testing

Symfony proporciona varias herramientas para testear los comandos. La más útil es la clase CommandTester. Utiliza clases input y output especiales para facilitar el testing sin una consola real:

use Acme\Console\Command\GreetCommand;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Tester\CommandTester;

class ListCommandTest extends \PHPUnit_Framework_TestCase
{
    public function testExecute()
    {
        $application = new Application();
        $application->add(new GreetCommand());

        $command = $application->find('demo:greet');
        $commandTester = new CommandTester($command);
        $commandTester->execute(array('command' => $command->getName()));

        $this->assertRegExp('/.../', $commandTester->getDisplay());

        // ...
    }
}

El método getDisplay() devuelve lo que se hubiera mostrado durante una llamada normal en la consola.

Puedes testear enviar argumentos y opciones al comando añadiéndolos como array al método execute():

use Acme\Console\Command\GreetCommand;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Tester\CommandTester;

class ListCommandTest extends \PHPUnit_Framework_TestCase
{
    // ...

    public function testNameIsOutput()
    {
        $application = new Application();
        $application->add(new GreetCommand());

        $command = $application->find('demo:greet');
        $commandTester = new CommandTester($command);
        $commandTester->execute(array(
            'command'      => $command->getName(),
            'name'         => 'Fabien',
            '--iterations' => 5,
        ));

        $this->assertRegExp('/Fabien/', $commandTester->getDisplay());
    }
}

Puedes también testear una aplicación console entera con AplicationTester.