Как проверить / подтвердить, транслируется ли событие в 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
. Вы найдете там событие.
Надеюсь, это поможет.