Laravel 使用中间件进行功能测试

Laravel feature test using middleware

我正在尝试对我的 Laravel 应用程序的起始页进行功能测试。

路线:

Route::domain('{subdominio}.'.env("APP_DOMAIN"))->middleware('mapNumserie')->group(function () {
    Route::get('/', 'FarmaciaController@show')->middleware('modomtofarmacia')->name('inicio');
})

出于某些原因,我使用 中间件 mapNumserie 将子域代理映射到序列号 $idfarmacia 以便在控制器中使用它:

public function handle($request, Closure $next){
    try{
        $route = $request->route();
        $idfarmacia = \App\Farmacia::where('subdominio', $route->subdominio)->value('numserie');
        $route->setParameter('idFarmacia', $idfarmacia);
        $route->forgetParameter('subdominio');
    }
    catch (\Exception $e){
        abort(404);
    }
    return $next($request);
}

在我的 ModoMtoFarmacia 中间件中,我只是检查应用程序实例是否未处于维护模式或已禁用:

public function handle(Request $request, Closure $next){
        $farmacia = \App\Farmacia::find($request->idFarmacia);
        if($farmacia->inactiva){
            abort(404);
        }
        if(!$farmacia->modomantenimiento){
            return $next($request);
        }
        else{
            return response()->view('errors.503')->setStatusCode(503);
        }
    }

在我的 控制器中 使用此 $idfarmacia 和 return 视图简单地获取一些数据:

public function show(Request $request, $idfarmacia) {
    $data = 
        //Query...
    if($data){
        return view('inicio', ['data' => $data]);
    }
    else{
        abort(404);
    }

}

我希望通过一个非常简单的 test 方法来验证 200 响应:

public function test_example(){
    $response = $this->get('http://mysubdomain.domain.prj');
    $response->assertStatus(200);
}

但是当我 运行 测试时我得到:

Expected response status code [200] but received 404.

使用的URL在web环境下可以正常运行,但是测试失败。我哪里错了?

终于在我的 phpunit.xml 设置中发现了问题,这导致了第一个查询(也是任何其他查询)的错误,在本例中是在 MapNumserie 中间件中发现的错误:

 $idfarmacia = \App\Farmacia::where('subdominio', $route->subdominio)->value('numserie');

我必须正确设置 DB_DATABASEDB_CONNECTION

的值