使用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()方法?
谢谢。
答
你将有你如何在测试中调用命令来更改左右,但有可能嘲笑的对象穿过。
如果由工匠使用的类是依赖注入是这样的:
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或流明工作。
你想在这个例子中模拟A $ a吗?不只是通过实际的对象? – random
在这种情况下,它是我的记录器,所以我不想传入实际情况。 – Aine