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_DATABASE
和 DB_CONNECTION
的值
我正在尝试对我的 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_DATABASE
和 DB_CONNECTION