You need to enable JavaScript to run this app. Codeigniter4 HTTP测试时控制器方法不存在如何正确断言404状态
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter4 HTTP测试时控制器方法不存在如何正确断言404状态

解决方案

CodeIgniter 4 测试环境默认不会自动捕获路由匹配类异常,会直接抛出PageNotFoundException中断测试,导致后续断言无法执行,这和生产环境下框架自动捕获异常返回404响应的表现不一致。你可以通过测试层配置调整实现需求,无需修改生产环境路由配置:

单条用例临时开启异常捕获

在发起测试请求前调用catchExceptions()方法,让框架将异常转换为对应HTTP响应对象,即可正常执行状态码断言:

$this->catchExceptions();
$r = $this->withSession($session)->get($url);
$r->assertStatus(404);

测试类全局开启

如果该测试类下所有用例都需要捕获异常,可直接在类中声明$catchExceptions属性:

protected $catchExceptions = true;

// 后续所有测试用例无需再单独调用catchExceptions()
public function testInvalidGetRequestReturns404()
{
    $session = []; // 你的session自定义数据
    $url = '/your-target-uri';
    
    $r = $this->withSession($session)->get($url);
    $r->assertStatus(404);
}

注意事项

如果测试时断言得到的是405状态码而非404,可检查app/Config/Routes.php中是否开启了$routes->setAutoRoute(true),或者是否有全局 fallback 路由覆盖了方法不匹配的响应逻辑,调整为你预期的配置即可。

内容的提问来源于stack exchange,提问作者Antony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:51:04