You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:35:19