尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何为Laravel控制台命令写快照测试?pretty-routes路由美化命令的Testbench+PHPUnit实战

如何为Laravel控制台命令写快照测试?pretty-routes路由美化命令的Testbench+PHPUnit实战 如何为Laravel控制台命令写快照测试pretty-routes路由美化命令的TestbenchPHPUnit实战【免费下载链接】pretty-routesDisplay your Laravel routes in the console, but make it pretty. 项目地址: https://gitcode.com/gh_mirrors/pre/pretty-routespretty-routes 是一个开源的 Laravel 路由美化包执行一条php artisan route:pretty就能把 HTTP 方法、URI、路由名按终端宽度对齐、分色展示成漂亮的路由列表。本文以它为例带你用Orchestra Testbench PHPUnit 快照断言为 Laravel 控制台命令编写快照测试——几乎不用手写断言就能永久守护命令输出的每一次变化。为什么控制台命令特别适合快照测试 命令的输出是一大段格式化文本逐行写assertEquals既繁琐又容易漏。快照测试的思路是首次运行把命令输出保存为快照基线文件纯文本Git 可 diff、PR 里一眼看完后续运行只对比输出是否变化变化即失败输出有意变更时一条命令重新生成快照再人工确认 diff 即可对route:pretty这种参数组合多、排版依赖终端宽度的命令来说快照测试几乎是零成本的最佳选择。环境准备3 个核心开发依赖pretty-routes 在 composer.json 中声明了三个关键依赖照抄即可依赖包作用orchestra/testbench提供随用随丢的 Laravel 应用容器可直接执行 Artisan 命令phpunit/phpunit测试运行器v9spatie/phpunit-snapshot-assertions提供MatchesSnapshots快照断言特性它把测试脚本定义为一行命令非常值得借鉴./vendor/bin/testbench package:test --parallel --no-coverage测试基类注册包、准备路由、固定终端宽度测试基类 tests/TestCase.php 做了三件事每件事都是坑点注册服务提供者getPackageProviders()返回PrettyRoutesServiceProvider让 Artisan 命令在测试中可用准备样例路由defineRoutes()注册 resource 路由、动态参数路由等保证输出内容丰富、覆盖各种分支固定终端宽度getEnvironmentSetUp()中执行putenv(COLUMNS120)。⚠️ 这是最关键的一步——命令会用点线按终端宽度对齐输出如果不固定宽度不同机器上输出就不同快照永远在假失败。测试主体数据提供器一次覆盖 24 种参数组合tests/SnapshotTest.php 的断言只有两行Artisan::call($command); $this-assertMatchesSnapshot(Artisan::output());真正干活的是cliDataProvider()用 3 种分组模式无分组 / 按 path / 按 name× 8 种参数组合--only-path、--except-name等做笛卡尔积自动生成 24 个用例。首次运行后每种组合的输出都会落到 tests/snapshots/ 目录中文件名自带说明例如group_none-basic_output__1.txt无需再为每种组合手写一个测试方法。快照如何运行与更新# 运行全部快照测试 composer test # 输出是有意变化的重新生成快照生成后务必 review git diff vendor/bin/testbench package:test --update-snapshots更新快照后打开 Git 差异确认变化只来自你预期的改动比如新增了一个--method过滤参数而不是格式、宽度之类的意外漂移。3 条可直接复用的经验✅固定终端宽度凡是输出依赖终端宽度的命令测试里必须固定COLUMNS否则快照没有意义。✅用Artisan::call()Artisan::output()在进程内调用并直接拿到输出字符串比调用外部进程再抓 stdout 更快更稳。✅数据提供器覆盖参数组合参数多不要手写用例用sprintf拼命令、用规范化的描述符命名快照可读性拉满。快照测试把命令输出长什么样变成了仓库里可审查的资产——下次任何人改动 PrettyRoutesCommand.php 的排版逻辑CI 会立刻告诉你。【免费下载链接】pretty-routesDisplay your Laravel routes in the console, but make it pretty. 项目地址: https://gitcode.com/gh_mirrors/pre/pretty-routes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表