Функциональность Тестовой очереди?

Согласно Документация 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() — мне нужно издеваться над этим?

2

Решение

Идея использования подделок заключается в том, что они являются альтернативой насмешкам. Так что, да, если вы хотите издеваться над этим 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';
});
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]