如何 test/assert 如果事件在 Laravel 广播
How to test/assert if an event is broadcasted in Laravel
我正在开发 Laravel 应用程序。我在我的应用程序中使用 Laravel Broadcast。我现在想做的是,我正在尝试测试是否在 Laravel 中广播了一个事件。
我正在广播这样一个事件:
broadcast(new NewItemCreated($item));
我想测试活动是否播出。我怎样才能测试它?我的意思是在单元测试中。我想做类似
的事情
Broadcast::assertSent(NewItemCreated::class)
附加信息
该事件在创建项目时触发的观察者事件中广播。
我认为您可以或多或少地将广播视为事件,因此您可以参考文档的 this section。
我想你可以用 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
方法,您可以像这样模拟它:
$this->mock(\Illuminate\Contracts\Broadcasting\Factory::class)
->shouldReceive('event')
->with(NewItemCreated::class)
->once();
// Processing logic here
不确定这是否是实现此目标的最佳方法,但这是唯一对我有用的方法。
我正在开发 Laravel 应用程序。我在我的应用程序中使用 Laravel Broadcast。我现在想做的是,我正在尝试测试是否在 Laravel 中广播了一个事件。
我正在广播这样一个事件:
broadcast(new NewItemCreated($item));
我想测试活动是否播出。我怎样才能测试它?我的意思是在单元测试中。我想做类似
的事情Broadcast::assertSent(NewItemCreated::class)
附加信息
该事件在创建项目时触发的观察者事件中广播。
我认为您可以或多或少地将广播视为事件,因此您可以参考文档的 this section。
我想你可以用 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
方法,您可以像这样模拟它:
$this->mock(\Illuminate\Contracts\Broadcasting\Factory::class)
->shouldReceive('event')
->with(NewItemCreated::class)
->once();
// Processing logic here
不确定这是否是实现此目标的最佳方法,但这是唯一对我有用的方法。