当前位置:  开发笔记 > 编程语言 > 正文

如何在Laravel测试中禁用选定的中间件

如何解决《如何在Laravel测试中禁用选定的中间件》经验,为你挑选了1个好方法。

因此,运行时出现Authentication和CSRF的错误是很常见的phpunit.

所以在TestCase中我们使用:

use WithoutMiddleware;

这个问题是当表单失败时,它通常会返回Flash消息和旧输入.我们已禁用所有中间件,因此我们无法访问Input::old('username');或闪存消息.

此外,我们对此失败表单的测试返回:

Caused by
exception 'RuntimeException' with message 'Session store not set on request.

有没有办法启用会话中间件并禁用其他所有内容.



1> Enijar..:

我发现这样做的最好方法不是使用WithoutMiddleware特征,而是修改要禁用的中间件.例如,如果要VerifyCsrfToken在测试中禁用中间件功能,可以执行以下操作.

在里面app/Http/Middleware/VerifyCsrfToken.php,添加一个handle检查APP_ENV测试的方法.

public function handle($request, Closure $next)
{
    if (env('APP_ENV') === 'testing') {
        return $next($request);
    }

    return parent::handle($request, $next);
}

这将覆盖其中的handle方法Illuminate\Foundation\Http\Middleware\VerifyCsrfToken,完全禁用该功能.


很好的解决方案,易于阅读和理解.顺便说一下,`env('APP_ENV')`可以替换为`app() - > env`,这有点好点:)
而不是直接检查`env('APP_ENV')`你可以使用`app() - > runningUnitTests()`(内部将执行相同的评估,但如果env值将来发生变化,它仍然可以工作).
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有