首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Laravel测试中禁用选定的中间件

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

Stack Overflow用户
提问于 2015-12-18 21:58:55
回答 4查看 12.6K关注 0票数 19

在运行phpunit时,来自身份验证和CSRF的错误是很常见的。

在我们使用的TestCase中:

use WithoutMiddleware;

问题是,当表单失败时,它通常会返回一条Flash消息和旧输入。我们已经禁用了所有中间件,所以我们无法访问Input::old('username');或flash消息。

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

代码语言:javascript
复制
Caused by
exception 'RuntimeException' with message 'Session store not set on request.

有没有一种方法可以启用会话中间件并禁用其他所有功能。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-18 22:28:48

我找到的最好的方法不是使用WithoutMiddleware特性,而是修改您想要禁用的中间件。例如,如果您想在测试中禁用VerifyCsrfToken中间件功能,您可以执行以下操作。

app/Http/Middleware/VerifyCsrfToken.php中,添加一个检查APP_ENV以进行测试的handle方法。

代码语言:javascript
复制
public function handle($request, Closure $next)
{
    if (env('APP_ENV') === 'testing') {
        return $next($request);
    }

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

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

票数 28
EN

Stack Overflow用户

发布于 2021-05-28 18:38:24

我可能会迟到,但我想通了:

代码语言:javascript
复制
$this->withoutMiddleware([
   'email-verified', //alias does NOT work
   EnsureEmailIsVerified::class //Qualified class name DOES WORK
]);
票数 1
EN

Stack Overflow用户

发布于 2020-10-07 13:19:21

下面的方法对我很有效:

代码语言:javascript
复制
use WithoutMiddleware;

public function setUp(): void
{
    parent::setUp();
    $this->withoutMiddleware();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34357350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档