有没有办法从 Symfony 2 测试用例运行控制台命令?我想运行用于创建和删除模式的学说命令。
最佳答案
这documentation chapter解释了如何从不同的地方运行命令。请注意,根据您的需要使用 exec()
是非常肮脏的解决方案...
在 Symfony2 中执行控制台命令的正确方法如下:
选项一
use Symfony\Bundle\FrameworkBundle\Console\Application as App;
use Symfony\Component\Console\Tester\CommandTester;
class YourTest extends WebTestCase
{
public function setUp()
{
$kernel = $this->createKernel();
$kernel->boot();
$application = new App($kernel);
$application->add(new YourCommand());
$command = $application->find('your:command:name');
$commandTester = new CommandTester($command);
$commandTester->execute(array('command' => $command->getName()));
}
}
方案二
use Symfony\Component\Console\Input\StringInput;
use Symfony\Bundle\FrameworkBundle\Console\Application;
class YourClass extends WebTestCase
{
protected static $application;
public function setUp()
{
self::runCommand('your:command:name');
// you can also specify an environment:
// self::runCommand('your:command:name --env=test');
}
protected static function runCommand($command)
{
$command = sprintf('%s --quiet', $command);
return self::getApplication()->run(new StringInput($command));
}
protected static function getApplication()
{
if (null === self::$application) {
$client = static::createClient();
self::$application = new Application($client->getKernel());
self::$application->setAutoExit(false);
}
return self::$application;
}
}
附言伙计们,不要因为调用 exec()
...
关于php - 从 Symfony 2 测试用例运行控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10387857/