使用phpunit测试Laravel(5.1)控制台命令

使用phpunit测试Laravel(5.1)控制台命令

问题描述:

测试Laravel控制台命令的最佳方式是什么?使用phpunit测试Laravel(5.1)控制台命令

这里是我运行一个命令的例子。它在构造函数和句柄方法中都有一个值。

class DoSomething extends Command 
{ 
    protected $signature = 'app:do-something'; 
    protected $description = 'Does something'; 

    public function __construct(A $a) 
    { 
     ... 
    } 

    public function handle(B $b) 
    { 
     ...  
    } 
} 

在我的测试类,我可以嘲笑A和B,但我无法弄清楚如何通过$一英寸

$this->artisan('app:do-something', [$b]); 

这可能吗?或者,我是否全力以赴?我是否应该将所有想法都通过handle()方法?

谢谢。

+0

你想在这个例子中模拟A $ a吗?不只是通过实际的对象? – random

+0

在这种情况下,它是我的记录器,所以我不想传入实际情况。 – Aine

你将有你如何在测试中调用命令来更改左右,但有可能嘲笑的对象穿过。

如果由工匠使用的类是依赖注入是这样的:

public function __construct(ActualObject $mocked_A) 
{ 
    // 
} 

然后写了测试用例是这样的:

$mocked_A = Mockery::mock('ActualObject'); 
$this->app->instance('ActualObject', $mocked_A); 

$kernel = $this->app->make(Illuminate\Contracts\Console\Kernel::class); 
$status = $kernel->handle(
    $input = new Symfony\Component\Console\Input\ArrayInput([ 
     'command' => 'app:do-something', 
    ]), 
    $output = new Symfony\Component\Console\Output\BufferedOutput 
); 
$console_output = $output->fetch(); 

$this->app->instance('ActualObject', $mocked_A);行是你能叫哪里并且使用你的类或对象的模拟版本,而不是实际的。

这将在Laravel或流明工作。