Тестирование команд Symfony не работает

Я хотел бы проверить команду Symfony с помощью CommandTester как объяснено здесь http://symfony.com/doc/2.3/components/console/introduction.html#testing-commands.

Команда, которую я хочу проверить, удаляет записи, имеющие столбец decision установите в true. (Подробнее в коде ниже)

public function testMyCommand()
{
// .....
// Updating the database
$res = $this->client->getContainer()->get('doctrine.orm.entity_manager')->createQueryBuilder()
->update('MyBundle:MyEntity', 'me')
->set('me.decision', true)
->where('me.id = :id')
->setParameter('id', 4);

// The command is meant to seek for all entities having *decision* set to true and delete them
$application = new Application($this->client->getKernel());
$application->add(new CronQuotidienCommand());

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

$this->assertEmpty($this->client->getContainer()->get('doctrine')->getRepository('MyBundle:MyEntity')->findBy(array('decision' => true));
}

Хотя тест не пройден, есть один MyEntity, чей идентификатор равен 4, с колонкой decision установлен в true, Который означает, что $commandTester->execute(array('command' => $command->getName())); не нашел ни одного MyEntity с decision установлен в true (обновить вопрос?).

Сюрприз, когда я заменяю

    $application = new Application($this->client->getKernel());
$application->add(new CronQuotidienCommand());

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

с

    shell_exec('php ' . $this->container->get('kernel')->getRootDir() . '/console myproject:mycmd');

это работает.

Есть идеи? Спасибо

2

Решение

Ты пробовал:

use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\ConsoleOutput;

$arguments = array(
// ...
);
$input = new ArrayInput($arguments);
$output = new ConsoleOutput();
$returnCode = $command->run($input, $output);

вместо:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]