作业中的测试功能 Class

Test functionality in the Job Class

我喜欢测试(通过 phpunit 进行功能测试)作业 Class(Lumen 队列)中的一些方法以确保其正常工作。

问题是作业 Class 有一些作业方法,例如 $this->job->getJobId()$this->release(5);

如果我从控制台 运行 phpunit,我得到一个错误:

Error: Call to a member function getJobId() on null

测试代码如下所示:

/**
 * @test
 */
public function it_has_successfully_uploaded()
{        
    $job = new SomeJob(['file' => ['file1.zip']]);

    $job->handle();
}

如何解决这个问题?

您的代码正在使用 $this->job->getJobId(),但未在任何地方声明或设置 属性。您是否可能正在使用 InteractsWithQueue 特征但忘记将其包含在您的代码粘贴中?

如果是,作业 属性 设置在 InteractsWithQueue::setJob. This method may be called from several places, but in your case it is probably from Illuminate\Queue\CallQueuedHandler::setJobInstanceIfNecessary 中。这是 Laravel 为您完成的工作的一些内部初始化,您必须在测试设置中模仿它。

我会实现一个简单版本的 Illuminate\Contracts\Queue\Job 并在调用 $job->handle() 之前调用 $job->setJob(new SimplisticVersionShazaamJob(...));