找不到控制器方法时的 Codeigniter 4 测试
Codeigniter 4 testing when controller method not found
我在 Codeigniter 4 中进行 HTTP 测试并收到以下错误:
CodeIgniter\Exceptions\PageNotFoundException: Controller method is not found
原因是我试图在只有 post
的 路由 上调用 get()
方法(将其切换为 add
导致不同的响应)。 是正确的。我试图确保页面 returns 404 如果有人试图破解它。问题是 Codeigniter 没有断言 Status 是 404,它只是失败了。这是我的代码触发:
$r = $this->withSession($session)->get($url);
$r->assertStatus(404);
注意断言永远不会运行!相反,我得到了原始错误消息。当然我应该能够检查 404 路由(我试过“404”而不是 int)??是的,我可以设置一个允许 Get 的自定义路由,但我想按原样测试它,而不是它不是什么。
如何让 CI4 接受我的错误路由作为 404?
我的解决方案是在我测试时定义一个常量 (IN_TESTING
),然后编辑 system/Codeigniter run()
函数。这当然是在修改一些人不喜欢的核心系统,但是直到有一个修复程序(我使用的是 4.1.2)然后这就足够了。
catch (PageNotFoundException $e)
{
if (!defined('IN_TESTING') || IN_TESTING == false){
$this->display404errors($e);
} else {
$this->router = Services::router($routes, $this->request);
$path = $this->determinePath();
$controller = $this->router->handle($path);
$method = $this->router->methodName();
echo $path."\n".$controller."\n".$method;
exit;
$this->response->setStatusCode(404);
return $this->response;
}
}
重要提示如果您确实对系统文件进行了更改,请跟踪它们!如果您随后需要 运行 升级,您会知道自己做了哪些更改。
我在 Codeigniter 4 中进行 HTTP 测试并收到以下错误:
CodeIgniter\Exceptions\PageNotFoundException: Controller method is not found
原因是我试图在只有 post
的 路由 上调用 get()
方法(将其切换为 add
导致不同的响应)。 是正确的。我试图确保页面 returns 404 如果有人试图破解它。问题是 Codeigniter 没有断言 Status 是 404,它只是失败了。这是我的代码触发:
$r = $this->withSession($session)->get($url);
$r->assertStatus(404);
注意断言永远不会运行!相反,我得到了原始错误消息。当然我应该能够检查 404 路由(我试过“404”而不是 int)??是的,我可以设置一个允许 Get 的自定义路由,但我想按原样测试它,而不是它不是什么。
如何让 CI4 接受我的错误路由作为 404?
我的解决方案是在我测试时定义一个常量 (IN_TESTING
),然后编辑 system/Codeigniter run()
函数。这当然是在修改一些人不喜欢的核心系统,但是直到有一个修复程序(我使用的是 4.1.2)然后这就足够了。
catch (PageNotFoundException $e)
{
if (!defined('IN_TESTING') || IN_TESTING == false){
$this->display404errors($e);
} else {
$this->router = Services::router($routes, $this->request);
$path = $this->determinePath();
$controller = $this->router->handle($path);
$method = $this->router->methodName();
echo $path."\n".$controller."\n".$method;
exit;
$this->response->setStatusCode(404);
return $this->response;
}
}
重要提示如果您确实对系统文件进行了更改,请跟踪它们!如果您随后需要 运行 升级,您会知道自己做了哪些更改。