SuperAPI AI 工具集

speeding-up-laravel-tests

测试与质量

查看项目

更新于 10-15 21:47

技能介绍

用途:当 Laravel/Pest 测试套件变慢、CI 时长增长、单个测试耗时数秒,或需要审计慢测试时,可按顺序应用这些技巧,环境类修复通常投入最小、收益最大。

主要能力与用法: 环境与配置:在 .env.testing 或 phpunit.xml 中设 BCRYPT_ROUNDS=4;禁用 XDebug,规模化时也禁用 pcov(除非需要覆盖率);在测试环境禁用 Pulse、Telescope、Nightwatch 等每次请求/命令都工作的后台包;使用 WithCachedConfig 与 WithCachedRoutes 避免重复解析配置和路由;在测试初始化中调用 withoutVite()(或 withoutMix())。 伪造外部交互:对非测试目标的外部服务使用 Notification::fake()、Mail::fake()、Bus::fake()、Event::fake()、Queue::fake();派发任务的 HTTP 端点若不断言任务行为则伪造队列;无关监听器用 Event::fake();使用 Http::preventingStrayRequests()(仅覆盖 Laravel HTTP 客户端,直连 Guzzle/cURL 需另行审计);Sleep::fake(syncWithCarbon: true) 避免真实等待(要求代码使用 Sleep 助手而非 PHP sleep());Exceptions::fake() 避免向 Flare/Sentry/Bugsnag 上报。 数据库:用 LazilyRefreshDatabase 替代 RefreshDatabase;审计工厂用法,避免嵌套 create() 产生多余行;用 $factory->recycle($model) 复用父模型。 剖析:./vendor/bin/pest --profile 打印各分片最慢测试;可用 phpunit-d3-report 可视化(原为 PHPUnit,需确认 Pest 兼容性);对神秘慢测试可插桩事件监听器或临时日志。

适用场景:测试平均耗时超过数秒、CI 时长攀升、审计特定慢测试、新项目标准化检查清单。

限制与常见错误:在不需要数据库的测试上启用 RefreshDatabase;生产代码使用真实 sleep() 或 Carbon 导致 Sleep::fake() 失效;加了 Queue::fake() 却仍断言任务副作用;为防失败而始终加载 XDebug;未创建 .env.testing 而保留默认 BCRYPT_ROUNDS。