laravel - 如果在 Laravel 中广播事件,如何测试/断言
问题描述
我正在开发一个 Laravel 应用程序。我在我的应用程序中使用 Laravel 广播。我现在要做的是尝试测试是否在 Laravel 中广播了一个事件。
我正在广播这样的事件:
broadcast(new NewItemCreated($item));
我想测试是否广播了该事件。我该如何测试它?我的意思是在单元测试中。我想做类似的事情
Broadcast::assertSent(NewItemCreated::class)
附加信息
该事件在创建项目时触发的观察者事件中广播。
解决方案
我认为你可以通过Laravel 中的 Mocking 来实现这一点(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);
}
}
推荐阅读
- docker - 无法更新对象类型 *libnetwork.endpointCnt 的存储:在存储中找不到密钥
- r - 从数据框列表中创建一个输出文件,其中包含每个数据框的特定名称和维度
- react-native - 在本机反应中从数组中查找和替换键
- java - 如何在java中删除日志文件中的日期和时间
- javascript - 基于滚动触发背景图像的更好方法
- java - 如何使用自定义消息记录肥皂请求和响应以在 Spring Boot 中归档?
- r - R:删除具有 2 列中文本条件组合的行
- apache-spark - PySpark - 列出特定文件和目录
- keycloak - 注册自动登录禁用
- javascript - 查询 mongodb 获取最近 30 分钟内创建的文档