Laravel 10 执行 php artisan test 提示命令未定义
结论
Laravel 10 没有取消 php artisan test。该命令通常由开发依赖 nunomaduro/collision 注册,并非由 laravel/framework 单独提供。
项目中可能没有安装开发依赖,例如执行过 composer install --no-dev,或者升级 Laravel 后没有同步更新测试依赖。这种情况下,make:test 仍然可用,但 test 命令不会出现在 Artisan 命令列表中。
恢复 php artisan test
先在项目根目录安装完整依赖:
composer install
如果 composer.json 缺少测试相关依赖,Laravel 10 项目通常可以安装:
composer require --dev "nunomaduro/collision:^7.0" "phpunit/phpunit:^10.0"
Laravel 10 支持 PHP 8.1,PHPUnit 10 也要求 PHP 8.1 或更高版本,因此这组版本与题目中的环境匹配。如果项目是从旧版本升级而来,还需要检查其他 Composer 依赖是否允许使用这些版本。
安装完成后,重新生成自动加载文件和包清单:
composer dump-autoload
php artisan package:discover
php artisan optimize:clear
然后检查命令是否已经注册:
php artisan list | grep test
正常情况下会看到类似内容:
test Run the application tests
此时可以运行:
php artisan test
不依赖 Artisan 直接运行测试
php artisan test 是 Laravel 对测试运行器的包装入口。即使该命令没有注册,只要 PHPUnit 已经安装,仍可直接执行:
./vendor/bin/phpunit
Windows 上可以使用:
vendor\bin\phpunit
运行指定测试文件:
php artisan test tests/Unit/ExampleTest.php
也可以直接使用 PHPUnit:
./vendor/bin/phpunit tests/Unit/ExampleTest.php
按测试方法过滤:
php artisan test --filter=test_example
仍然没有命令时的检查项
1. 确认依赖是否存在
composer show nunomaduro/collision
composer show phpunit/phpunit
如果 Composer 提示找不到包,说明相应的开发依赖尚未安装。
2. 检查是否使用了 --no-dev
生产部署中经常执行:
composer install --no-dev
这条命令不会安装 require-dev 中的 Collision 和 PHPUnit,所以生产环境里没有 php artisan test 通常是正常的。需要运行测试时,应在开发环境或 CI 测试阶段执行:
composer install
3. 检查包发现配置
查看 composer.json 是否禁止自动发现 Collision:
{
"extra": {
"laravel": {
"dont-discover": [
"nunomaduro/collision"
]
}
}
}
如果有这项配置且没有特殊用途,请从 dont-discover 中移除 nunomaduro/collision,然后执行:
composer dump-autoload
php artisan package:discover
通常不用手动将 Collision 的 Service Provider 写入 config/app.php,Laravel 会通过 Composer 包发现机制自动注册。
4. 检查升级后的依赖组合
如果项目是从 Laravel 8 或 Laravel 9 升级到 Laravel 10,而不是全新创建,composer.json 中可能仍保留旧版 Collision 或 PHPUnit 的版本约束。可以通过以下命令查看冲突原因:
composer why-not nunomaduro/collision 7
composer why-not phpunit/phpunit 10
修正版本约束后,再更新相关开发依赖:
composer update nunomaduro/collision phpunit/phpunit --with-all-dependencies
这个问题通常不是 PHP 8.1 或 Laravel 10 本身造成的,而是 Collision、PHPUnit 等 require-dev 依赖缺失、未安装或未被自动发现。恢复开发依赖后,php artisan test 会重新出现在 Artisan 命令列表中。
备注:内容仅供参考。
