You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:10