作业中的测试功能 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(...));
。
我喜欢测试(通过 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(...));
。