【发布时间】:2022-01-22 17:50:30
【问题描述】:
我正在尝试对我的 Laravel 应用程序的起始页进行功能测试。
路线:
Route::domain('{subdominio}.'.env("APP_DOMAIN"))->middleware('mapNumserie')->group(function () {
Route::get('/', 'FarmaciaController@show')->middleware('modomtofarmacia')->name('inicio');
})
由于某些原因,我使用 middleware mapNumserie 在其中将子域 aganist 映射为序列号 $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 获取一些数据并返回一个视图:
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 环境中可以正常工作,但测试失败。我哪里错了?
【问题讨论】:
-
您可以在您的代码中调试,在您的条件之前检查 $idfarmacia 是否不为空,和/或在中间件中调试进程
-
好的,我做到了。 $route = $request->route() 在中间件中获取 '/' 值。我不知道原因。
-
我应该如何构建路线?或者我应该如何构建测试来验证该路线?
-
我测试了你的中间件“mapNumserie”,我一直都有“/”。我不明白它是如何工作的。我想我遗漏了一些信息
标签: laravel laravel-middleware laravel-testing