2016-03-07 117 views
4

我正在嘗試編寫一些單元測試以確保我的路由不會被意外重寫。我發現一個答案是檢查一個正確的控制器是否被分配到特定的路線here在Laravel進行路由測試的模擬中間件

但是我想檢查一下,正確的中間件被分配到路由。我嘗試了類似的方法

$tmp = new CorsService; 
$corsMiddleware = Mockery::mock('Barryvdh\Cors\HandleCors[handle]', array($tmp)) 
    ->shouldReceive('handle')->once() 
    ->andReturnUsing(function($request, Closure $next) { 
     return $next($request); 
    }); 

\App::instance('Barryvdh\Cors\HandleCors', $corsMiddleware); 

由於某些原因,測試沒有選擇這個。我假設這是因爲中間件實例不是使用App::instance存儲的。

我在做什麼錯?

回答

3

所以我發現有兩個問題與上面的代碼

  1. 你不能鏈->shouldReceive直接與Mockery::mock
  2. 返回值有一個從封閉

工作實例失蹤\

$tmp = new CorsService; 
$corsMiddleware = Mockery::mock('Barryvdh\Cors\HandleCors[handle]', array($tmp)); 
$corsMiddleware->shouldReceive('handle')->once() 
    ->andReturnUsing(function($request, \Closure $next) { 
     return $next($request); 
    }); 

\App::instance('Barryvdh\Cors\HandleCors', $corsMiddleware); 
0

嘗試獲取路由並檢查其中間件

// Get Routes 
    foreach (Route::getRoutes() as $route) { 
     $middleware = $route->gatherMiddleware(); 
     $name = $route->getName(); 
     \Log::debug($name.'--'); 
     \Log::debug($middleware); 
    } 
相關問題