Menu

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'

本文章首发在 Laravel China 社区
上一篇 下一篇
讨论数量: 1
发起讨论


doug
求教程中的命令行工具名称?
0 个点赞 | 1 个回复 | 问答
刻意练习,每日精进。
10
点赞
549
浏览
1
讨论