pest不是独立测试引擎,它依赖composer管理依赖、phpunit执行测试;装错包、漏步骤或路径错误都会导致it()无法运行,如./vendor/bin/pest报command not found实为终端未找到脚本,应使用php vendor/bin/pest或配置composer.json的scripts命令。

Pest 不是独立测试引擎,它靠 Composer 管理依赖、靠 PHPUnit 执行测试 —— 装错包、漏步骤、路径写错,都会导致 it() 写了也跑不起来。
composer require pestphp/pest --dev 之后为什么 ./vendor/bin/pest 报 command not found
这不是 Pest 没装上,而是终端找不到可执行脚本。Composer 默认把二进制文件放 vendor/bin,但它不会自动加进系统 PATH。
- 最稳做法:直接用
php vendor/bin/pest,绕过 shell 查找逻辑 - 如果想用简短命令,改
composer.json的scripts:"test": "php vendor/bin/pest",之后运行composer test - 别手动把
vendor/bin加进全局PATH—— 多个项目混用不同版本 Pest 时,pest命令会指向错误的版本 - 补一句
composer dump-autoload有时也能解决,尤其在自定义过bin-dir的项目里
Laravel 项目里 get()、post()、actingAs() 全部报 undefined function
这些不是 Pest 自带的,它们来自 pestphp/pest-plugin-laravel,且必须由 php artisan pest:install 注入才能生效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只运行
composer require --dev pestphp/pest pestphp/pest-plugin-laravel是不够的 - 必须紧接着运行
php artisan pest:install—— 它会生成tests/Pest.php、注入uses(Tests\TestCase::class)、配置phpunit.xml、建立Feature/Unit目录结构 - 跳过这步,
get('/')就是裸调函数,没上下文、没$this、没 Laravel 测试生命周期 - 检查
tests/Pest.php是否存在,以及里面是否有uses(...)->in('Feature', 'Unit')—— 路径大小写敏感,写成unit就不扫描
测试文件写了 it() 却显示 “0 tests run”
Pest 默认只识别以 Test.php 结尾的文件,并且内容里至少有一个 it() 或 test() 调用。纯 describe() 块或命名不规范,会被直接跳过。
- 文件名必须是
UserRegistrationTest.php这类格式,不能是user_test.php、PestUserTest.php或Example.php - 哪怕只写一行
<?php it('works', fn() => expect(true)->toBeTrue());,也比空describe()有用 - 确认
phpunit.xml里<directory>tests</directory>存在且未被注释;Pest 依赖这个配置定位根目录 - 如果改过
<testsuites></testsuites>,但漏掉tests/Feature或tests/Unit,即使文件名对、函数对,也不会被发现
expect($x)->toBe(2) 报 Call to a member function toBe() on null
expect() 返回的是一个链式对象,但如果你把它赋值给变量后没继续调用断言方法,或者中间有逻辑分支提前返回,就可能让后续调用落在 null 上。
- 典型错误:
$result = expect($x); if ($x > 0) { $result->toBe(2); }—— 这里$result是对象,但toBe()调用没被实际执行 - 正确写法是连续链式调用:
expect($x)->toBe(2);或expect($x)->not()->toBe(3); - 注意不要在
expect()后面接return、break或条件中断,否则链会被截断 - 这种错误不会立刻抛异常,而是在运行到
toBe()时才报Call to a member function ... on null,容易误判为环境问题
真正卡住人的地方,往往不是语法写错,而是 tests/Pest.php 缺失、phpunit.xml 配置失效、或插件没注册——它们不报明显错误,只让测试静默跳过或方法不可用。










