执行 composer require pestphp/pest --dev 后仅支持基础断言(如 expect、it),但无法使用 laravel 特性(如 get()、工厂)或自动发现测试,必须额外安装 pest-plugin-laravel 并运行 php artisan pest:install 才能完整支持。

composer require pestphp/pest --dev 能不能直接跑测试
能,但只限最基础断言。执行 composer require pestphp/pest --dev 后,你会得到 expect()、it()、describe() 和 PHPUnit 底层运行能力,足够写 it('adds 1 + 1', fn() => expect(1 + 1)->toBe(2)) 这类纯逻辑测试。
但以下情况它不工作:
-
get('/')报Call to undefined function get()—— Laravel 辅助函数没加载 -
User::factory()->create()报Factory not found—— Laravel 测试上下文缺失 - 测试文件放在
tests/Unit/下却“0 tests run”——默认扫描路径未显式声明
根本原因:Pest 本身不绑定任何框架,pestphp/pest 包只是 DSL 层,所有“开箱即用”的便利都靠插件和初始化脚本补全。
Laravel 项目必须装 pest-plugin-laravel 并运行 pest:install
在 Laravel 中,跳过这步等于只装了半套工具。仅执行 composer require --dev pestphp/pest 是不够的;必须补上:
-
composer require --dev pestphp/pest-plugin-laravel(Laravel 10+ 必须显式安装,官方文档容易漏掉这点) -
php artisan pest:install(生成tests/Pest.php,注入uses(Tests\TestCase::class),挂载RefreshDatabase等 trait)
运行完 pest:install 后,tests/Pest.php 里会出现类似这行:
uses(Tests\TestCase::class)->in('Feature', 'Unit');
注意:in() 的参数大小写敏感,写成 'unit' 或漏掉 'Unit' 都会导致对应目录下测试不被发现。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
为什么 ./vendor/bin/pest 找不到我的测试文件
常见现象是执行 ./vendor/bin/pest 输出 Tests: 0,但文件明明存在。排查点很具体:
- 文件名必须以
Test.php结尾(UserTest.php✅,user_test.php❌,PestUser.php❌) - 文件内容里至少有一个
it()或test()调用(纯describe()块不触发执行) -
phpunit.xml文件必须存在且含有效<testsuites></testsuites>配置,至少保留:<directory>tests</directory>
- 如果自定义过 Composer
bin-dir,或改过自动加载逻辑,补一句composer dump-autoload再试
别依赖“文件放对位置就自动识别”——Pest 完全复用 PHPUnit 的发现机制,不是自己另搞一套扫描逻辑。
测试命令怎么写才稳定不踩坑
不要手动把 vendor/bin 加进系统 PATH,不同项目 Pest 版本可能冲突。推荐两种可靠方式:
- 始终用完整路径调用:
php vendor/bin/pest或./vendor/bin/pest(Linux/macOS) - 在
composer.json的scripts里加一条:"test": "php vendor/bin/pest"
,之后统一用composer test
想初始化配置?优先用 php vendor/bin/pest --init,它绕过 shell 查找逻辑,100% 可用;别依赖 pest 命令全局生效——那需要你提前配好 PATH,而这个动作本身就会引入环境差异。
真正容易被忽略的是:Pest 没有独立配置文件,它所有行为都受 phpunit.xml 和 tests/Pest.php 共同控制。改错其中一个,另一个没同步,测试就静默失败。










