php - 从 Symfony 2 测试用例运行控制台命令

标签 php symfony

有没有办法从 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()...

而羞辱 Symfony2

关于php - 从 Symfony 2 测试用例运行控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10387857/

相关文章:

Symfony2 - 在 Sonata Admin 的元素列表中提供默认过滤器

php - "resource"下无法识别的选项 "fos_user"

javascript - webRTC Ice Candidate 未得到处理(如何让 webRTC 工作)

php - 在 android 中使用 AsyncTask 将数据发送到 mySQL

php - Symfony\组件\表单\异常\InvalidArgumentException : Could not load type "..."

php - 隐式连接和原则中的位置 - 如何?

javascript - 在页面内包含 API 调用以延迟加载

php - 为什么 Latté = Latté?

php - Symfony2,跨多个包访问同一个调度程序

php - JMSSerializerBundle,反序列化后持久化没有关系