Согласно Документация Laravel, я могу использовать Queue::fake();
предотвратить работу из очереди.
Что не ясно, как проверить (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';
});
Других решений пока нет …