Laravel 5.3 - 避免在 phpunit 测试中发送松弛通知

Posted

技术标签:

【中文标题】Laravel 5.3 - 避免在 phpunit 测试中发送松弛通知【英文标题】:Laravel 5.3 - Avoid sending slack notification in phpunit test 【发布时间】:2017-01-01 10:38:26 【问题描述】:

所以我有一个测试设置,可以访问注册页面并提交表单。然后测试通过token验证账号。

验证帐户后,将通过SlackMessage 发送通知。

我想知道的是如何拦截它,并阻止松弛消息实际发送 - 仅在运行测试时,但获得某种确认通知确实被调用。

【问题讨论】:

不能模拟通知发送类吗? 我想我可以。从来不知道嘲笑甚至存在。好吧,我有很多新事情要做:) 我对测试很陌生。结束了 Notification::shouldReceive('send')->once();这似乎工作得很好。谢谢:) 【参考方案1】:

我在 Laravel 5.3 MockApplicationServices 特征中发现了一个未记录的方法 expectsNotifications()。它的工作原理与documented event mocking 几乎相同。

用法是:

$this->expectsNotification($notifiable, $notification);

// eg.
$this->expectsNotification($user, UpperLimitExceeded::class);

还有 $this->withoutNotifications() 可以跳过任何遇到的通知。

【讨论】:

这是我能找到的对expectsNotification 的唯一引用。非常感谢!【参考方案2】:

如果您需要跳过发送所有通知,请将以下行放在测试方法的开头:

$this->withoutNotifications();

【讨论】:

【参考方案3】:

我最终只是为任何想知道的人做Notification::shouldReceive('send')->once();。我猜这是模拟通知门面的正确方法:)

【讨论】:

以上是关于Laravel 5.3 - 避免在 phpunit 测试中发送松弛通知的主要内容,如果未能解决你的问题,请参考以下文章

如何解决致命错误:无法重新声明 view()(之前声明过?(phpunit laravel 5.3)

在链配置的命名空间 App\Entity [Symfony 5.3][PHPUnit 8.5] 中找不到类 Mock_*

Laravel/Lumen 5.3.3:在迁移中覆盖 env 值

如何在 laravel 5.5 中运行 phpunit

如何在Laravel项目中安装PHPunit

在 Laravel 的 Homestead 中运行 PHPUnit