我正在开发Laravel应用程序。我在应用程序中使用Laravel Broadcast。我现在想做的是,我要测试事件是否在Laravel中广播。
我正在广播这样的事件:
xgboost
我想测试事件是否广播。我该如何测试?我的意思是在单元测试中。我想做类似的事情
broadcast(new NewItemCreated($item));
该事件在创建项目时触发的观察者事件中广播。
答案 0 :(得分:1)
我认为您可以将广播视为事件,或多或少,因此可以参考文档的this section。
答案 1 :(得分:0)
如果您正在使用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
。您将在此处找到活动。
希望有帮助。
答案 2 :(得分:0)
我认为您可以使用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);
}
}
答案 3 :(得分:0)
如果您使用 broadcast($event)
广播您的活动,该函数将调用广播工厂的 event
方法,您可以模拟该方法,如下所示:
$this->mock(\Illuminate\Contracts\Broadcasting\Factory::class)
->shouldReceive('event')
->with(NewItemCreated::class)
->once();
// Processing logic here
不确定这是否是实现这一目标的最佳方法,但它是唯一对我有用的方法。