我喜欢在Job Class(Lumen Queue)中测试一些方法(通过phpunit进行功能测试),以确保它正常工作。
问题是Job Class有一些工作方法,如$this->job->getJobId()
和$this->release(5);
如果我从控制台运行phpunit,我会收到错误:
错误:在null
上调用成员函数getJobId()
测试代码如下所示:
/**
* @test
*/
public function it_has_successfully_uploaded()
{
$job = new SomeJob(['file' => ['file1.zip']]);
$job->handle();
}
如何解决此问题?
答案 0 :(得分:1)
您的代码正在使用$this->job->getJobId()
,但声明或设置的属性无处可寻。您是否正在使用InteractsWithQueue特性但忘记在代码粘贴中包含它?
如果是,则在InteractsWithQueue::setJob中设置作业属性。可以从多个地方调用此方法,但在您的情况下,它可能来自Illuminate\Queue\CallQueuedHandler::setJobInstanceIfNecessary。这是Laravel为您完成的工作的一些内部初始化,您必须在测试设置中模仿。
我会在调用$job->setJob(new SimplisticVersionShazaamJob(...));
之前实现简化版Illuminate\Contracts\Queue\Job并致电$job->handle()
。