Laravel 当某个作业失败时,如何测试该作业在一定时间后是否被释放?

Laravel 当某个作业失败时,如何测试该作业在一定时间后是否被释放?,laravel,testing,phpunit,Laravel,Testing,Phpunit,当我有这样的工作时 类CheckVideoStatusJob实现ShouldQueue { 使用可调度、可交互、可排队、可序列化的模型; 公共视频; 公共功能构造(视频$Video) { $this->video=$video; } 公共函数句柄(CheckStatusAction$action) { 如果(!$action->execute($this->video)){ $this->release(60); } } } 如何测试:当作业失败时,它将在(60)秒后释放回队列?在我看来,您依

当我有这样的工作时

类CheckVideoStatusJob实现ShouldQueue
{
使用可调度、可交互、可排队、可序列化的模型;
公共视频;
公共功能构造(视频$Video)
{
$this->video=$video;
}
公共函数句柄(CheckStatusAction$action)
{
如果(!$action->execute($this->video)){
$this->release(60);
}
}
}

如何测试:当作业失败时,它将在(60)秒后释放回队列?

在我看来,您依靠Laravels自己的测试来确保释放方法有效,并且在工作环境中不使用时间测试。如果您仍然想要,您只需要确保调用了release。我会用它做一个部分的模拟

这段代码创建了一个只模拟release方法并将视频传递给构造函数的类

$mock = \Mockery::mock(CheckVideoStatusJob::class, $video)->makePartial();

// expects release call, once, parameter should be 60 returns null
$mock->shouldReceive('release')->once()->with(60)->return(null);

// action should offcourse secure that execute returns false
$mock->handle($action);
为了确保测试的安全,请使用带有mockery的断言,并使用mockery特性

use MockeryPHPUnitIntegration;

现在我不确定这是否有效,因为当handle方法被调用时,它是对父类的,并且询问$this->release将在那里做什么,今晚将对它进行测试,留下答案,因为它可能会有所帮助,直到那时基于这个答案,解决方案应该有效。我喜欢它,并且使用这种方法是有意义的。一个相关的问题,我不想把它放在新的帖子里。我正在使用“retryUntil”函数(),如何用这种方法测试它?$mock->shouldReceive('retryUntil')->once()->with()->return(null);我们应该这样做