php – 是否有Laravel测试事件被触发的次数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 是否有Laravel测试事件被触发的次数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1575字,纯文字阅读大概需要3分钟。
内容图文
![php – 是否有Laravel测试事件被触发的次数?](/upload/InfoBanner/zyjiaocheng/805/2543d181d4634c82b3995991c6dd3f82.jpg)
我使用基本PHPUnit配置文件与默认的TestCase.php文件.
我正在寻找一种方法来检查在测试期间是否多次触发事件.当前代码如下:
function test_fires_multiple_events()
{
$this->expectsEvents(SomeEvent::class);
}
理想情况下,我想要:
function test_fires_multiple_events()
{
$this->expectsEvents(SomeEvent::class)->times(3);
}
解决方法:
在浏览了MocksApplicationServices中的代码之后,我能够捎带特征,以及在使用withoutEvents()方法时捕获的字段.
扩展名如下:
function test_fires_multiple_events()
{
$this->withoutEvents(); // From MocksApplicationServices
$c = collect($this->firedEvents)
->groupBy(function($item, $key) { return get_class($item); })
->map(function($item, $key) { return $item->count(); });
$this->assertsEqual(3, $c->get(SomeEvent::class));
}
要逐步完成集合的操作:
1)collect($this-> firedEvents):获取捕获的事件并将它们存储在集合中.值得注意的是,MocksApplicationServices将每个事件都推送到一个数组中,这意味着它已经保持计数.
2)groupBy(function($item,$key){return get_class($item);}):按类名称分组,这意味着我们现在有一个数组集合.
3)map(函数($item,$key){..}:简单地计算孩子们.
这导致了如下结构:
Illuminate\Support\Collection (1) (
protected items -> array (2) [
'App\Events\SomeEvent' => integer 2
'App\Events\SomeOtherEvent' => integer 1
]
)
编辑
只是为了清理一下 – 您可以将以下内容添加到基本测试用例文件中:
public function assertEventFiredTimes($event, $count)
{
$this->assertEquals(
count(collect($this->firedEvents)
->groupBy(function($item, $key) { return get_class($item); })
->get($event, [])),
$count
);
}
然后在你的测试中:
$this->assertEventFiredTimes(SomeEvent::class, 3);
不要忘记添加withoutEvents().
内容总结
以上是互联网集市为您收集整理的php – 是否有Laravel测试事件被触发的次数?全部内容,希望文章能够帮你解决php – 是否有Laravel测试事件被触发的次数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。