026. 优化 Cli 错误提示——nunomaduro/collision
优化 Cli 错误提示——nunomaduro/collision
nunomaduro/collision 是「命令行/控制台里的 Whoops」,当我们在命令行中与 Laravel 应用进行交互时,它会提供美观的错误报告信息。nunomaduro/collision
已经默认安装在 Laravel 5.6 中,对于大多数的 Laravel 项目我们还是推荐使用 LTS 版本—— Laravel 5.5,所以需要单独安装这个扩展包。
这节课我们依然是以 LaraBBS 项目为例,看看这个扩展包会对开发有什么样的帮助。
安装
为了对比扩展包使用前后的变化,可以先复制一份项目出来:
$ cp -r larabbs larabbs-test
这样现在有了两个一样的项目 larabbs 和 larabbs-test,我们在 larabbs 中安装nunomaduro/collision
扩展包,查看一下效果。
需要 PHP 版本大于等于 7.1
,需要确保 php 版本正确。
$ composer require nunomaduro/collision --dev
扩展包需要 phpunit 版本大于等于 7.0,Laravel 5.5 的项目默认都使用的是 6.0 的版本,所以先升级 phpunit
到 7.0。
修改 composer.json 中的 phpunit 为 ~7.0
:
composer.json
.
.
.
"overtrue/laravel-query-logger": "^1.0",
"phpunit/phpunit": "~7.0",
.
.
.
使用 update 命令升级 phpunit,增加 --with-dependencies 参数同时升级 phpunit 的依赖:
$ composer update phpunit/phpunit --with-dependencies
查看一下 phpunit
的版本:
由于 homestead 中设置了 alias,所以默认会使用 composer 安装的 phpunit,可以查看一下 .bash_alias
。
需要在 phpunit.xml 中增加如下代码:
phpunit.xml
.
.
.
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener" />
</listeners>
.
.
.
先测试执行一下 phpunit:
没有报错,这样整个安装就完成了。
使用
代码异常
首先在两个项目中,增加一些错误代码,如下:
app/Console/Commands/GenerateToken.php
public function handle()
{
$userId = $this->ask('输入用户 id';
$user = User::find($userId);
执行 php artisan 应该就能看到报错了,对比一下两个项目中的报错信息:
左边是 larabbs ,安装了扩展包,右边是 larabbs-tes,没有安装扩展包。明显能看到报错信息更加的详细,不仅有报错的位置,还显示了报错代码,以及完整的 trace 信息。
在两个项目中,还原这段错误代码:
$ git checkout app/Console/Commands/GenerateToken.php
单元测试
我们修改一个单元测试用例,将 assertStatus(201)
改为 assertStatus(200)
,这样单元测试肯定会报错了:
tests/Feature/TopicApiTest.php
.
.
.
public function testStoreTopic()
{
.
.
.
$response->assertStatus(200)
->assertJsonFragment($assertData);
}
.
.
.
执行一下 phpunit:
可以看到异常位置的详细代码,更方便我们快速定位报错的位置,扩展包的作用还是很明显的。
还原这部分代码:
$ git checkout tests/Feature/TopicApiTest.php
代码版本控制
$ git add -A
$ git commit -m 'nunomaduro/collision'