Laravel路由测试:如何识别请求方法并排除POST请求?
如何在Laravel路由测试中判断请求类型并排除POST请求
要在你的测试代码里区分路由的HTTP请求类型(比如GET/POST),并跳过POST请求的测试,其实可以利用Laravel Route对象自带的methods()方法来实现,下面一步步帮你修改代码:
核心思路
Laravel的每个路由实例(就是你循环里的$route对象)都有一个methods()方法,它会返回该路由支持的所有HTTP请求方法数组——比如一个GET路由会返回['GET', 'HEAD'],POST路由则返回['POST']。我们只需要在循环里增加一个判断,跳过包含POST方法的路由即可。
修改后的测试代码
public function testRoutes() { $app = app(); $routes = $app->routes->getRoutes(); /** * Test if mynamespace routes are redirected to login page if is not the login page */ echo PHP_EOL; foreach ($routes as $route) { // 跳过POST请求的路由 if(in_array('POST', $route->methods())) { continue; } if(strpos($route->getName(),'mynamespace::' ) !== false ) { $url = $route->uri; //$appURL = env('APP_URL') .'/'; $response = $this->get($url); if((int)$response->status() !== 200 ){ echo $url . ' (FAILED) did not return 200. The response is ' . $response->status(); $this->assertTrue(false); } else { echo $url . ' (success)'; $this->assertTrue(true); } echo PHP_EOL; } } }
额外说明
如果你想只针对GET请求的路由进行测试(而不是单纯排除POST),可以把判断条件改成:
// 只处理GET请求的路由 if(!in_array('GET', $route->methods())) { continue; }
这样会更精准,因为有些路由可能同时支持HEAD和GET方法,这种情况下也能正常包含进来测试。
内容的提问来源于stack exchange,提问作者fefe
相关产品推荐
相关产品推荐

