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

时间:2019-09-16 18:14:07

标签: laravel laravel-testing laravel-events laravel-broadcast

我正在开发Laravel应用程序。我在应用程序中使用Laravel Broadcast。我现在想做的是,我要测试事件是否在Laravel中广播。

我正在广播这样的事件:

xgboost

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

broadcast(new NewItemCreated($item));

其他信息

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

4 个答案:

答案 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

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