Как проверить / подтвердить, транслируется ли событие в Laravel

Я разрабатываю приложение Laravel. Я использую Laravel Broadcast в своем приложении. Что я пытаюсь сделать сейчас, так это то, что я пытаюсь проверить, транслируется ли событие в Laravel.

Я транслирую такое событие:

broadcast(new NewItemCreated($item));

Я хочу проверить, транслируется ли мероприятие. Как я могу это проверить? Я имею в виду юнит-тест. Я хочу сделать что-то вроде

Broadcast::assertSent(NewItemCreated::class) 

Дополнительная информация

Это событие транслируется в событии наблюдателя, которое запускается при создании элемента.

4 ответа

Решение

Я думаю, вы можете относиться к трансляциям более или менее как к событиям, поэтому вы можете обратиться к этому разделу документации.

Я думаю, вы можете добиться этого с помощью Mocking in Laravel (Event Fake)

<?php

namespace Tests\Feature;

use App\Events\NewItemCreated;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Support\Facades\Event;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * Test create item.
     */
    public function testOrderShipping()
    {
        // this is important
        Event::fake();

        // Perform item creation...

        Event::assertDispatched(NewItemCreated::class, function ($e) {
            return $e->name === 'test' ;
        });

        // Assert an event was dispatched twice...
        Event::assertDispatched(NewItemCreated::class, 2);

        // Assert an event was not dispatched...
        Event::assertNotDispatched(NewItemCreated::class);
    }
}

Если вы транслируете свое мероприятие с broadcast($event), эта функция вызовет event метод Broadcasting Factory, который вы можете имитировать, например:

      $this->mock(\Illuminate\Contracts\Broadcasting\Factory::class)
        ->shouldReceive('event')
        ->with(NewItemCreated::class)
        ->once();

// Processing logic here

Не уверен, что это лучший способ добиться этого, но он единственный, который сработал для меня.

Если вы используете log драйвер трансляции, просто проверьте свой /storage/log/some_name.logфайл. Вы можете найти что-то вроде этого:

[2019-09-16 18:33:46] local.INFO: Broadcasting [test] on channels [test-channel] with payload:
{
    "test": "test",
    "socket": null
}  

Если ваш драйвер pusher, войдите в свою учетную запись Pusher и перейдите на панель управления. Выберите свое приложение и нажмитеDebug Console. Вы найдете там событие.

Надеюсь, это поможет.

Другие вопросы по тегам