测试队列功能?
Test Queue functionality?
根据 Laravel Documentation,我可以使用 Queue::fake();
防止作业排队。
不清楚如何在作业 Class 未排队时测试 (PHPUnit) 中的一些方法。
例如:
class ActionJob extends Job
{
public $tries = 3;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}
protected function deleteAllFiles()
{
//delete all the files then return true
// if failed to delete return false
}
}
这是我要测试的示例 deleteAllFiles()
- 我需要模拟它吗?
使用假货的想法是它们是模拟的替代品。所以,是的,如果你想嘲笑 deleteAllFiles()
被调用,那么我不相信你可以用假货做到这一点。
但是,您可以断言作业中存在某个属性。
有一件事,它不在您的示例中,但请确保您的工作正在实施 \Illuminate\Contracts\Queue\ShouldQueue
。
像这样
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class ActionJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 3;
public $data; // Make sure this public so you can access it in your test
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}
protected function deleteAllFiles()
{
// do stuff
}
}
那么在你的测试中:
// ActionJobTest.php
Queue::fake();
// Do some things to set up date, call an endpoint, etc.
Queue::assertPushed(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});
如果您想在作业中对 $data
进行断言,那么您可以进行一些其他状态更改并在闭包中对其进行断言。
旁注:如果作业是 Disptachable
你也可以这样断言:
// ActionJobTest.php
Bus::fake();
// Do some things to set up date, call an endpoint, etc.
Bus::assertDispatched(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});
根据 Laravel Documentation,我可以使用 Queue::fake();
防止作业排队。
不清楚如何在作业 Class 未排队时测试 (PHPUnit) 中的一些方法。
例如:
class ActionJob extends Job
{
public $tries = 3;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}
protected function deleteAllFiles()
{
//delete all the files then return true
// if failed to delete return false
}
}
这是我要测试的示例 deleteAllFiles()
- 我需要模拟它吗?
使用假货的想法是它们是模拟的替代品。所以,是的,如果你想嘲笑 deleteAllFiles()
被调用,那么我不相信你可以用假货做到这一点。
但是,您可以断言作业中存在某个属性。
有一件事,它不在您的示例中,但请确保您的工作正在实施 \Illuminate\Contracts\Queue\ShouldQueue
。
像这样
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class ActionJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 3;
public $data; // Make sure this public so you can access it in your test
public function __construct($data)
{
$this->data = $data;
}
public function handle()
{
if ($this->data['action'] == "deleteAllFiles") {
$this->deleteAllFiles();
}
}
protected function deleteAllFiles()
{
// do stuff
}
}
那么在你的测试中:
// ActionJobTest.php
Queue::fake();
// Do some things to set up date, call an endpoint, etc.
Queue::assertPushed(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});
如果您想在作业中对 $data
进行断言,那么您可以进行一些其他状态更改并在闭包中对其进行断言。
旁注:如果作业是 Disptachable
你也可以这样断言:
// ActionJobTest.php
Bus::fake();
// Do some things to set up date, call an endpoint, etc.
Bus::assertDispatched(ActionJob::class, function ($job) {
return $job->data['action'] === 'deleteAllFiles';
});