2

我喜欢测试(通过 phpunit 进行功能测试)作业类(流明队列)中的一些方法,以确保它正常工作。

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

如果我从控制台运行 phpunit,我会收到错误消息:

错误:在 null 上调用成员函数 getJobId()

测试代码如下所示:

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

    $job->handle();
}

我该如何解决这个问题?

4

1 回答 1

1

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

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

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

于 2017-10-01T11:25:17.280 回答