Laravel8升级至9后,执行artisan test多测试函数时报目录不存在错
Laravel 8 升级到 9 后多测试函数执行
artisan test报错解决 问题描述
Laravel从8版本升级到9版本后,单个功能测试函数执行正常,但添加第二个测试函数后,执行artisan test时出现如下错误:
PHPUnit\Framework\ExceptionWrapper The "" directory does not exist. at vendor/symfony/finder/Finder.php:590
该错误仅在执行artisan test(单文件含多个测试函数)和artisan optimize时触发,其他artisan命令无异常。
已尝试的无效方案:
- 检查缺失目录,确认无此问题;
- 执行
composer dump-autoload; - 删除vendor目录后执行
composer install; - 尝试Stack Overflow上的其他方案(检查.gitignore、代码调试);
- 执行
composer update;
错误栈显示问题触发自Illuminate\Foundation\Bootstrap\LoadConfiguration.php调用Symfony\Component\Finder\Finder->in(''),即传入了空的目录参数。
解决步骤
1. 检查配置文件中的路径配置
- 查看
config/app.php及其他自定义配置文件,确认是否存在'path' => ''这类空路径配置,或依赖未正确设置的环境变量的路径项; - 检查
.env文件,确认STORAGE_PATH、VIEW_COMPILED_PATH等涉及目录路径的环境变量均已正确赋值,无空值情况。
2. 排查测试环境配置
- 查看
config/testing目录下的配置文件,确认其中的路径配置合法,无空目录设置; - 检查测试类的
setUp/tearDown方法,确认是否存在修改配置路径的代码,导致多次测试执行时路径被重置为空。
3. 检查自定义配置逻辑或扩展包
- 若项目有自定义配置加载逻辑,或安装了涉及配置加载的扩展包,检查这些代码在Laravel 9环境下的兼容性,确认是否存在路径处理异常导致空目录传入的情况。
4. 调试定位问题源头
- 在
vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php中添加临时调试代码,定位调用Finder->in()时传入空字符串的具体场景:
// 找到调用Finder->in()的代码位置,打印路径变量 $paths = ...; // 对应获取路径的变量 dd($paths); // 查看是否包含空字符串
通过调试定位到具体配置项后,针对性修复路径赋值问题。
内容的提问来源于stack exchange,提问作者Win
相关产品推荐
相关产品推荐

