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

file

扩展包需要 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

file

查看一下 phpunit 的版本:
file

由于 homestead 中设置了 alias,所以默认会使用 composer 安装的 phpunit,可以查看一下 .bash_alias

file

需要在 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:
file

没有报错,这样整个安装就完成了。

使用

代码异常

首先在两个项目中,增加一些错误代码,如下:

app/Console/Commands/GenerateToken.php

    public function handle()
    {
        $userId = $this->ask('输入用户 id';

        $user = User::find($userId);

执行 php artisan 应该就能看到报错了,对比一下两个项目中的报错信息:

file

左边是 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:

file

可以看到异常位置的详细代码,更方便我们快速定位报错的位置,扩展包的作用还是很明显的。

还原这部分代码:

$ git checkout tests/Feature/TopicApiTest.php

代码版本控制

$ git add -A
$ git commit -m 'nunomaduro/collision'

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~