如何测试/断言事件是否在 Laravel 中广播



我正在开发一个Laravel应用程序。我正在我的应用程序中使用Laravel广播。我现在要做的是,我正在尝试测试一个事件是否在拉拉维尔广播。

我正在广播这样的事件:

broadcast(new NewItemCreated($item));

我想测试事件是否已广播。如何测试?我的意思是在单元测试中。我想做类似的事情

Broadcast::assertSent(NewItemCreated::class) 

其他信息

该事件在创建项目时触发的观察者事件中广播。

我认为你可以通过 Laravel 中的嘲弄(事件假(来实现这一点

<?php
namespace TestsFeature;
use AppEventsNewItemCreated;
use IlluminateFoundationTestingRefreshDatabase;
use IlluminateFoundationTestingWithoutMiddleware;
use IlluminateSupportFacadesEvent;
use TestsTestCase;
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(IlluminateContractsBroadcastingFactory::class)
->shouldReceive('event')
->with(NewItemCreated::class)
->once();
// Processing logic here

不确定这是否是实现这一目标的最佳方法,但它是唯一对我有用的方法。

最新更新