Laravel [5.3|5.4] 测试作业中的作业调度



我正在努力理解如何在另一个作业中测试一个作业的调度。我将提供一个代码示例。

这是我的主要工作类别,我们可以称之为father

final class FatherJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info("Hello World, I'm the father.");
dispatch(new ChildJob());
}
}

然后我们有孩子工作

final class ChildJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info("I'm the child");
}
}

测试已设置如下

final class JobTest extends TestCase
{
/** @test */
public function it_has_been_dispatched()
{
$this->expectsJobs(ChildJob::class);
dispatch(New FatherJob ());
}
}

这个测试失败了,当然这就是问题的重点,但为什么呢?

我已经做了一些挖掘,我认为问题依赖于expectsJobs()内部的呼叫withoutJobs(),似乎withoutJobs()干扰当前队列,因此它不允许调用其余的工作,但也许我完全偏离了轨道。

如果此逻辑是有意的,如何创建一个测试套件,允许我检查作业中的作业是否已被调用?

提前谢谢你。

期望乔布斯模拟所有作业引擎。 你不能使用 dispacth((。

$this->expectsJobs(ChildJob::class);
$job = new FatherJob();
$job->handle();

最新更新