【问题标题】:How to test for a redirect in Slim 2 and PHPUnit?如何在 Slim 2 和 PHPUnit 中测试重定向?
【发布时间】:2018-10-31 21:46:12
【问题描述】:

我正在使用 Slim 2 和 PHPUnit,并且想测试向特定端点发出 GET 请求会导致重定向。我尝试获取响应的标题,但它们显示200,因为响应是我被重定向到的正确加载的页面。

以下是重定向在应用中的工作方式。基本上,如果 Slim Auth 中间件抛出未经授权的异常,它会重定向到登录页面:

$app->error(function (\Exception $e) use ($app) {
    if ($e instanceof HttpUnauthorizedException) {
        return $app->redirectTo('/login');
    }
});

【问题讨论】:

  • 如果状态为 200,则该请求没有被重定向,但代码 sn-p 会有所帮助
  • @QinisoMdletshe 谢谢,我添加了一个代码 sn-p。
  • 如果是重定向,那么你应该得到 HTTP 30x 的状态

标签: php redirect testing phpunit slim


【解决方案1】:

如果您提供的代码就是您想要测试的全部内容,我认为您不一定需要检查实际的响应对象。当HttpUnauthorizedException 的实例作为输入参数提供给它时​​,编写一个测试来验证您编写的错误处理函数是否从$app 对象调用redirectTo('/login') 就足够了。错误处理函数是您在此代码 sn-p 中编写的唯一单元,其他部分(如 $app 对象中的 error 和 redirectTo 方法)仅在您的代码中调用,您不需要为它们编写任何测试,这就是为什么我建议不要检查实际响应对象的原因,因为在这种情况下,您会以某种方式将错误处理功能的测试代码紧密耦合到 Slim 框架中的 redirectTo 方法,这不会是 单元测试了。

所以我建议你不要把错误处理函数写成匿名函数,这样你就可以为那个特定的函数编写单元测试。然后你可以为它编写测试并使用像Mockery这样的库来为这个函数提供一个模拟的$app对象,并在Mockeyr的帮助下(像shouldRecieve这样的旧方法或更新的allows方法)你可以确保如果将 HttpUnauthorizedException 的实例传递给该模拟对象,则会在该模拟对象上调用 redirectTo('/login')。

另外,这个问题似乎很相关Slim Framework endpoint unit testing

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2015-01-31
    • 2015-07-26
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多