Laravel框架内置了许多测试辅助函数和模拟功能,这非常好。然而,我注意到其他工程师在出现问题时往往会陷入调试困境。
Laravel文档中给出了以下示例:
Queue::assertPushed(function (ShipOrder $job) use ($order) { return $job->order->id === $order->id; });
很简单,对吧?我们正在确保 `ShipOrder` 任务被推送到队列中,并且订单ID匹配。
但是,如果ID不匹配或者发生其他错误会怎样呢?我们会得到以下错误信息:
Failed asserting that false is true.
这并没有什么用。我们知道任务没有被推送,但是是由于ID匹配失败还是其他原因引起的呢?当需要满足多个条件时,这个问题就变得更加复杂了:
Queue::assertPushed(function (ShipOrder $job) use ($order) { return $job->order->id === $order->id && $job->order->second === $order->second && $job->order->third === $order->third && $job->order->fourth === $order->fourth; });
现在,如果任何一个条件失败,我们仍然会得到相同的PHPUnit错误消息:
Failed asserting that false is true.
我们无法轻松知道哪个条件失败了。您可以逐个删除条件进行排查,但这是一种耗时的过程。有更好的方法。
我们可以使用断言来比较每个条件,而不是使用链式条件。然后,如果所有条件都为真,手动返回 true。
Queue::assertPushed(function (ShipOrder $job) use ($order) { $this->assertSame($job->order->id, $order->id); $this->assertSame($job->order->second, $order->second); $this->assertSame($job->order->third, $order->third); $this->assertSame($job->order->fourth, $order->fourth); return true; });
现在,如果任何一个断言失败,PHPUnit 将能够精确定位到错误的行号,从而加快调试速度,让您迅速解决问题。文章来源:https://www.toymoban.com/diary/laravel/693.html
Failed asserting that X is identical to Y # --- Failed asserting that 456 is identical to 123. /tests/PathToFileTest.php:62
总之,通过为每个比较使用断言,您可以快速定位和解决代码中的问题。有效利用 Laravel 的模拟功能可以显著提高开发者的生产力。文章来源地址https://www.toymoban.com/diary/laravel/693.html
到此这篇关于使用 Laravel Mock 提高您的工作效率的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!