Laravel Sail测试报错:Target Class RestApiController不存在
Laravel Sail测试问题解决:控制器不存在与数据库连接错误
问题1:Target Class RestApiController不存在
可能原因与解决步骤
- 路由写法不符合Laravel 8+规范:Laravel 8及以后默认移除了路由的默认命名空间,直接使用字符串类名可能无法解析。修改路由为类引用写法:
use App\Http\Controllers\RestApiController; Route::middleware(['check.team.role'])->group(function () { // ... Route::get('/api/v1/folder/{folder}', [RestApiController::class, 'getFolderById']); // ... }); - 路由缓存导致旧配置残留:在Sail容器内执行命令清除路由缓存:
./vendor/bin/sail artisan route:clear - RouteServiceProvider命名空间未配置:打开
app/Providers/RouteServiceProvider.php,取消$namespace属性的注释并设置为'App\Http\Controllers',这样路由中可以省略完整命名空间:protected $namespace = 'App\Http\Controllers';
问题2:替换TestCase后出现Call to a member function connection() on null
原因与解决办法
- 不能替换Laravel封装的TestCase:
PHPUnit\Framework\TestCase是原生PHPUnit测试类,不会初始化Laravel应用容器、数据库连接等环境。必须恢复使用Laravel提供的测试基类:use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class RestApiOtherTest extends TestCase { use RefreshDatabase; // 你的测试方法 } - 检查测试环境数据库配置:确认
.env.testing中的数据库配置正确,Sail环境下通常设置DB_HOST=mysql,确保测试数据库服务正常运行。
内容的提问来源于stack exchange,提问作者Дмитрий Сиротин
相关产品推荐
相关产品推荐

