Метод assertPushed
Метод assertPushed класса Queue применяется в тестах
Laravel для проверки, что определённое задание (job) было добавлено
в очередь. Первым параметром передаётся класс задания,
вторым - замыкание для дополнительной проверки данных задания.
Метод возвращает true или выбрасывает исключение при неудаче.
Синтаксис
<?php
Queue::assertPushed($jobClass, $callback);
?>
Пример
Давайте проверим, что задание отправлено в очередь:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Jobs\ProcessOrder;
use Illuminate\Support\Facades\Queue;
class JobTest extends TestCase
{
public function test_order_job_is_pushed()
{
Queue::fake();
ProcessOrder::dispatch(['order_id' => 1]);
Queue::assertPushed(ProcessOrder::class);
}
}
?>
Пример
Давайте проверим задание с конкретными данными:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Jobs\SendWelcomeEmail;
use Illuminate\Support\Facades\Queue;
class JobTest extends TestCase
{
public function test_welcome_email_job_has_correct_data()
{
Queue::fake();
$userId = 5;
SendWelcomeEmail::dispatch(['user_id' => $userId, 'email' => 'user@example.com']);
Queue::assertPushed(SendWelcomeEmail::class, function ($job) use ($userId) {
return $job->data['user_id'] === $userId;
});
}
}
?>
Пример
Давайте проверим количество отправленных заданий:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Jobs\ProcessOrder;
use Illuminate\Support\Facades\Queue;
class JobTest extends TestCase
{
public function test_multiple_jobs_are_pushed()
{
Queue::fake();
ProcessOrder::dispatch(['order_id' => 1]);
ProcessOrder::dispatch(['order_id' => 2]);
Queue::assertPushed(ProcessOrder::class, 2);
}
}
?>
Пример
Давайте проверим, что задание не было отправлено:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Jobs\ProcessOrder;
use App\Jobs\SendEmail;
use Illuminate\Support\Facades\Queue;
class JobTest extends TestCase
{
public function test_job_is_not_pushed()
{
Queue::fake();
ProcessOrder::dispatch(['order_id' => 1]);
Queue::assertNotPushed(SendEmail::class);
}
}
?>
Результат выполнения кода:
"Test passed: SendEmail job was not pushed"
Смотрите также
-
класс
Queue,
который предоставляет методы для тестирования очередей -
метод
fake,
который подменяет драйвер очереди на фейковый -
метод
assertDispatched,
который проверяет отправку событий -
метод
assertDispatched,
который проверяет отправку команд в шину