gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:39:59 24 4
gpt4 key购买 nike

测试 Laravel 控制台命令的最佳方法是什么?

这是我正在运行的命令的示例。它在构造函数和句柄方法中接受一个值。

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,但我不知道如何传入 $a。
$this->artisan('app:do-something', [$b]);

是否可以?还是我对这一切都错了?我应该把所有的想法都传递给 handle() 方法吗?

谢谢。

最佳答案

您将不得不改变在测试中调用命令的方式,但可以模拟通过的对象。

如果 Artisan 使用的类是这样进行依赖注入(inject)的:

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); line 是您可以调用和使用类或对象的模拟版本而不是实际版本的地方。

这将在 Laravel 或 Lumen 中工作。

关于laravel-5 - 使用 phpunit 测试 Laravel (5.1) 控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com