拉拉维尔>= 5.5
从Laravel 5.5开始,该方法允许您指定要禁用的中间件,而不是全部禁用它们。因此,无需修改所有中间件以添加 env 检查,只需在测试中执行此操作:withoutMiddleware()
$this->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class);
拉拉维尔 < 5.5
如果您使用的是 Laravel < 5.5,则可以通过将更新的方法添加到基本 TestCase 类以覆盖框架 TestCase 中的功能来实现相同的功能。
>菲律宾比索= 7
如果您使用的是 PHP7+,请将以下内容添加到您的 TestCase 类中,您将能够使用上面提到的相同方法调用。此功能使用在 PHP7 中引入的匿名类。
/**
* Disable middleware for the test.
*
* @param string|array|null $middleware
* @return $this
*/
public function withoutMiddleware($middleware = null)
{
if (is_null($middleware)) {
$this->app->instance('middleware.disable', true);
return $this;
}
foreach ((array) $middleware as $abstract) {
$this->app->instance($abstract, new class {
public function handle($request, $next)
{
return $next($request);
}
});
}
return $this;
}
< 7 菲律宾比索
如果您使用的是 PHP < 7,则必须创建一个实际的类文件,并将其注入容器而不是匿名类。
在以下位置创建此类:
class FakeMiddleware
{
public function handle($request, $next)
{
return $next($request);
}
}
重写您的方法并使用您的类:withoutMiddleware()
TestCase
FakeMiddleware
/**
* Disable middleware for the test.
*
* @param string|array|null $middleware
* @return $this
*/
public function withoutMiddleware($middleware = null)
{
if (is_null($middleware)) {
$this->app->instance('middleware.disable', true);
return $this;
}
foreach ((array) $middleware as $abstract) {
$this->app->instance($abstract, new FakeMiddleware());
}
return $this;
}