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
相关产品推荐
相关产品推荐

