【问题标题】:Codeigniter 4 testing when controller method not found找不到控制器方法时的 Codeigniter 4 测试
【发布时间】:2021-07-13 11:32:59
【问题描述】:

我在 Codeigniter 4 中进行 HTTP 测试并收到以下错误:

CodeIgniter\Exceptions\PageNotFoundException: Controller method is not found

原因是我试图在只有post路由 上调用get() 方法(将其切换到add 会产生不同的响应)。那是正确的。如果有人试图破解它,我正在尝试确保该页面返回 404。问题是 Codeigniter 没有断言 Status 是 404 它只是摔倒了。这是我的代码触发:

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

注意断言永远不会运行!相反,我收到了原始错误消息。当然,我应该能够检查 404 路由(我尝试过 '404' 而不是 int)??是的,我可以设置一个允许 Get 的自定义路由,但我想按原样测试它而不是测试它不是什么。

如何让 CI4 将我的错误路由作为 404 接受?

【问题讨论】:

    标签: codeigniter codeigniter-4


    【解决方案1】:

    我的解决方案是在测试时定义一个常量 (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;
        }
    }
    

    如果您确实对系统文件进行了更改,请跟踪它们!如果您随后需要运行升级,您将知道所做的更改。

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 2022-08-13
      • 2016-04-04
      • 2014-03-09
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多