是否有方法从Symfony 2测试用例运行控制台命令?我想运行用于创建和删除模式的doctrine命令。从Symfony 2测试用例运行控制台命令
回答
该文档已更新自从我上次的答案,以反映调用现有命令的正确Symfony的2路:
http://symfony.com/doc/current/components/console/introduction.html#calling-an-existing-command
是的,如果你的目录结构看起来像
/symfony
/app
/src
那么你要么使用
passthru("php app/console [...]") (http://php.net/manual/en/function.passthru.php)
exec("php app/console [...]") (http://www.php.net/manual/en/function.exec.php)
命令运行
phpunit -c app/phpunit.xml.dist
或将命令放回
php app/consode [...]
如果您正在从高于symofny其他目录的单元测试,你就必须相对路径调整到app目录为它工作。
要从应用程序运行:
// the document root should be the web folder
$root = $_SERVER['DOCUMENT_ROOT'];
passthru("php $root/../app/console [...]");
是否存在从应用程序内部运行的方式?我正在尝试创建完全隔离的测试。 – vinnylinux
另外,我想让命令在特定环境(测试)上运行。 – vinnylinux
是的,您可以将该代码放入模型或实体中,但您必须使用'$ _SERVER ['DOCUMENT_ROOT'];'获取应用程序的路径。我将编辑我的答案 – ContextSwitch
这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;
}
}
P.S.伙计们,不要羞耻Symfony2与呼吁exec()
...
正如在“测试命令”下的官方Symfony2文档中提到的那样,这是正确的答案:http://symfony.com/doc/current/components/console/introduction.html#testing-commands –
同样,问题不是关于测试命令... – Moonchild
@FrancescoCasula链接被破坏 - 新的位置:http://symfony.com/doc/current/console.html#testing-commands –
docs告诉你建议的方式来做到这一点。示例代码粘贴如下:
protected function execute(InputInterface $input, OutputInterface $output)
{
$command = $this->getApplication()->find('demo:greet');
$arguments = array(
'command' => 'demo:greet',
'name' => 'Fabien',
'--yell' => true,
);
$input = new ArrayInput($arguments);
$returnCode = $command->run($input, $output);
// ...
}
- 1. Symfony控制台命令behat测试
- 2. 在控制器中运行多个控制台命令Symfony 2
- 3. Symfony 2 - 从控制台命令调用控制器方法
- 4. 如何从控制器运行symfony 2运行命令
- 5. Phpunit尝试测试所有Symfony控制台命令
- 6. 从控制器的Symfony3控制台运行控制台命令
- 7. 从控制台设置phpunit命令symfony
- 8. Symfony从控制台删除命令
- 9. 如何从控制台运行CakePHP 2.x插件测试用例?
- 10. 从控制器调用与sudo的symfony控制台命令
- 11. 无法测试Symfony2控制台命令
- 12. 使用symfony从控制台执行命令
- 13. 从控制台运行symfony动作
- 14. 无法运行控制台命令yii2
- 15. IntelliJ插件 - 运行控制台命令
- 16. 停止Symfony的控制台命令
- 17. 我想从命令行运行Selenium测试用例文件
- 18. 从命令行运行测试用例失败
- 19. 如何从命令行在JUnit中运行测试用例?
- 20. 从Symfony命令运行Linux命令
- 21. 控制器与命令Symfony的2
- 22. 获取服务容器中的Symfony 2控制台命令给
- 23. Symfony 2控制台命令创建自定义数据库
- 24. Symfony 2:验证控制台命令参数
- 25. 从命令行运行单元测试
- 26. 从命令行运行FitNesse的测试
- 27. 从命令行运行Junit测试
- 28. Symfony从服务器上的控制器运行命令
- 29. Symfony2控制台命令
- 30. 如何在远程调试Symfony的控制台命令
像魅力一样工作,谢谢。 – vinnylinux
这不是真正的Symfony方式 –
它甚至不是一个好方法,因为你不能正确地解析ouptut。您也可能遇到环境问题(如果php不在用户运行测试的路径中,该怎么办?)。 – Sgoettschkes