在Job Class中测试功能

时间:2017-09-30 19:55:29

标签: php laravel phpunit lumen laravel-queue

我喜欢在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();
}

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您的代码正在使用$this->job->getJobId(),但声明或设置的属性无处可寻。您是否正在使用InteractsWithQueue特性但忘记在代码粘贴中包含它?

如果是,则在InteractsWithQueue::setJob中设置作业属性。可以从多个地方调用此方法,但在您的情况下,它可能来自Illuminate\Queue\CallQueuedHandler::setJobInstanceIfNecessary。这是Laravel为您完成的工作的一些内部初始化,您必须在测试设置中模仿。

我会在调用$job->setJob(new SimplisticVersionShazaamJob(...));之前实现简化版Illuminate\Contracts\Queue\Job并致电$job->handle()