php - Laravel 按需测试通知

标签 php laravel unit-testing testing phpunit

我有一个 slack 通知类,每当用户执行激活过程时,它都会在我们公司的 slack 帐户内通过特定 channel 发送一条消息。

该系统可以工作,但它是手动测试的,这并不酷。

通知由附加到 UserHasBeenActivated 事件的监听器发送,监听器如下:

public function handle(UserHasBeenActivated $event)
{
    Notification::route("slack", config("services.slack.user.url"))
        ->notify(new UserActivated($event->user));
}

非常简单。这里的问题是通知是按需通知,因此很难测试...因为没有任何类型的文档说明如何测试按需通知!

此刻我被困在这里:

public function it_sends_a_notification_when_an_user_is_activated()
{
    Notification::fake();

    $user = factory(User::class)->states("deleted")->create();
    $user->activate();

    Notification::assertSentTo(
        $user,
        UserActivated::class
    );
}

当然这个测试失败了,activate() 方法触发了事件 UserHasBeenActivated 并顺序地触发了所有的监听器,其中之一发送了相应的通知。

您知道如何测试按需通知吗?我是否缺少任何隐藏的 API?

最佳答案

对于新手

Laravel 在 v5.5.14 中引入了使用提供的 Notification::fake() 系统测试匿名通知的能力。

有关此 功能的更多信息,请点击此处:https://github.com/laravel/framework/pull/21379

关于php - Laravel 按需测试通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46277323/

相关文章:

php - 使用未定义常量 S - 假定为 "S"

c# - 为单元测试模拟对象的实例化

unit-testing - Grails UrlMappings Spock测试

php - 如果字符串只包含空格?

angular - 未知错误: Error: No valid exports main found for 'C:\Users\UTKARSH SRIVASTAVA\AppData\Roaming\npm\node_modules\@angular\cli\node_modules\uuid'

javascript - Ajax验证和SyntaxError : JSON Parse error: Unrecognized token '<' on Laravel

c# - 如何在 Prism 中设置 ServiceLocationProvider 进行单元测试导航?

php - 将网站导出到 XML 页面

php - 在库 api 中为每个任务或每个事务创建一个函数?

php - 如何用 C 语言将独立的 PHP 进程与 apache CGI 进程分离?