2016-11-23 95 views
0

Laravel默认为disablesVerifyCsrfToken中间件如果正在运行测试。因此我没有注意到api路由需要csrf令牌才能成功。有没有办法让它恢复一些测试?像如何为某些测试启用VerifyCsrfToken?

function withVerifyCsrfTokenMiddleware() 
{ 
    $this->app... // here we're passing something to the app 
} 

,并在VerifyCsrfTokenhandle法修正案。在一个自定义的。那个从框架中覆盖了方法。但那只是我的想法。有更好的吗?

+0

哪个laravel的版本您使用的? – tomirons

+0

@tomirons Laravel 5.2。 –

回答

0

好了,这就是我所做的:

app/Http/Middleware/VerifyCsrfToken.php

function handle($request, Closure $next) 
{ 
    $dontSkipCsrfVerificationWhenRunningTests 
     = $this->app->bound('dontSkipCsrfVerificationWhenRunningTests') 
      && $this->app->make('dontSkipCsrfVerificationWhenRunningTests'); 
    if (
     $this->isReading($request) || 
     ! $dontSkipCsrfVerificationWhenRunningTests && $this->runningUnitTests() || 
     $this->shouldPassThrough($request) || 
     $this->tokensMatch($request) 
    ) { 
     return $this->addCookieToResponse($request, $next($request)); 
    } 

    throw new TokenMismatchException; 
} 

tests/TestCase.php

function withVerifyCsrfTokenMiddleware() 
{ 
    $this->app->instance('dontSkipCsrfVerificationWhenRunningTests', TRUE); 
} 
相关问题