php artisan pest:install 要求 laravel ≥9.27 且已安装 pestphp/pest 和 pestphp/pest-plugin-laravel,否则报错;命令不存在需检查版本与插件加载,测试文件须置于 tests/feature 或 tests/unit 目录下并确保 tests/pest.php 正确配置 uses(tests\testcase::class)->in('feature', 'unit')。

直接用 php artisan pest:install 就能跑起来,但前提是 Laravel ≥9.27 且已装好 pestphp/pest 和 pestphp/pest-plugin-laravel;否则命令报错、测试不生效、断言失败全是版本或插件缺失导致的。
php artisan pest:install 报 “Command not found” 怎么办
这不是 Pest 没装,而是 Laravel 版本太低或插件未加载。
- Laravel 必须 ≥9.27(Pest 插件支持起点),
composer show laravel/framework看版本,低于此请先升级 -
composer require --dev pestphp/pest pestphp/pest-plugin-laravel要执行完再运行安装命令,别跳步 - 如果已装但命令仍不可用,检查
vendor/bin/pest是否存在;不存在说明 Composer 自动加载失败,可试composer dump-autoload - 别手动改
phpunit.xml或删tests/TestCase.php——Pest 依赖它提供$this->get()、事务回滚等能力
test() 和 it() 写法差异与实际影响
两者底层完全一致,但闭包内能否直接用 Laravel 测试方法,取决于是否绑定了 Tests\TestCase 实例。
- 只要
tests/Pest.php包含uses(Tests\TestCase::class)->in('Feature', 'Unit'),test()和it()都能直接调用$this->postJson()、$this->assertDatabaseCount() - 如果用了
expect($response)->status(200)却报Call to undefined function expect(),说明没启用pest-plugin-assertions,需composer require --dev pestphp/pest-plugin-assertions - 闭包里
return $user没用——Pest 不捕获返回值,所有断言必须显式写,比如expect($user->name)->toBe('John')或$this->assertTrue($user->exists)
数据库事务不回滚、assertDatabaseMissing 失败
不是代码写错,是测试文件没被 Pest 自动挂载到上下文里。
- 确保测试文件放在
tests/Feature或tests/Unit下——uses(Tests\TestCase::class)->in('Feature', 'Unit')只扫描这两个目录 - 别把 Model 测试扔进
tests/Integration或自建目录,否则RefreshDatabase和事务不会自动生效 - Model 测试中调用
$user->delete()却没进deleted_at?检查tests/TestCase.php是否继承Illuminate\Foundation\Testing\TestCase,且没被覆盖或删掉 - 软删除、观察者、事件监听器全靠 Laravel 应用上下文启动,而上下文只在
uses(Tests\TestCase::class)生效时才完整加载
最常被忽略的是:Pest 不是“装了就能用”,它靠 tests/Pest.php 的配置链驱动整个测试生命周期;删了它、改错路径、漏掉 ->in() 参数,后续所有断言和辅助方法都会静默失效。











