Laravel按需测试通知

时间:2017-09-18 10:42:38

标签: php laravel unit-testing testing phpunit

我有一个松弛的通知类,每当用户执行激活过程时,它就会在特定的通道中在公司的slack帐户内发送消息。

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

通知由附加到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吗?

1 个答案:

答案 0 :(得分:2)

对于新人

Laravel在tasks: - name: Check if mongod is active command: systemctl status sshd register: deb_check ignore_errors: yes no_log: True failed_when: false - name: Raise a flag whenever the service should be stopped notify: stop mongod when: '"dead" in deb_check.stdout' handlers: - name: stop mongod service: name: mongod state: stopped 中引入了使用提供的v5.5.14系统测试匿名通知的功能。

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