2013-06-18 56 views
1

我有一个运行Symfony 2.0命令的测试。在测试中,我运行的命令是这样的:如何在运行Symfony2命令测试时设置命令行标志?

$application = new Application(static::$kernel); 
$application->add(new MyCommand()); 

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

我想运行与--no-调试标志,这是一个内置的标志,该应用程序的命令:(?我猜)控制台。我已经试过:

$commandTester->execute(array('command' => $command->getName(), '--no-debug' => true)); 

,我也试过:

​​

的建议here。我也尝试过其他一些排列。但是他们都没有做我想做的事情,这是关闭日志中的所有调试消息。有没有办法做到我想要的测试?

回答

2

禁用调试内核

可以初始化在测试的设置内核()方法与调试设置为false。

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class YourCommandTest extends WebTestCase 
{ 

    public function setUp() 
    { 
     static::$kernel = static::createKernel(array('debug' => false)); 
     static::$kernel->boot(); 

     // ... 
    } 

看看WebTestCase->createKernel()

使用enviroments

如果你不想在你的日志调试输出编辑/创建app/config/config_test.yml和编辑...

monolog: 
    handlers: 
     file: 
      type: stream 
      level: debug  # log-level ... 

...另一个log level适合您的需求。

然后用--env=test

+0

[手册页](http://symfony.com/doc/2.0/cookbook/console/usage.html)说:“除了更改环境外,还可以选择禁用调试模式。在你希望在开发环境中运行命令的地方很有用,但避免收集调试数据的性能影响:'$ php app/console list --no-debug'。“而我的经验正是如此,当我从命令行运行它时,--no-debug标志关闭了调试。 我知道如何在配置文件中设置日志级别,但我只想关闭此特定测试的调试,而不是所有测试。 – matt

+0

好点如何在你的测试中初始化内核而不用调试? $ kernel = new AppKernel('test',false); – nifr

+0

更新了我的答案 – nifr

0

--no-debug明显禁用调试模式,显示错误执行使用测试环境的命令。尝试在--env=test的测试环境中运行命令。