2014-02-07 1 views
1

PHPUnit을 사용하여 Laravel 4에서 컨트롤러의 일부 동작을 테스트하려고합니다.Laravel 컨트롤러를 테스트 할 때보기에 정의되지 않은 변수

public function testAboutPage() 
{ 
    $this->client->request('GET', 'about'); 

    $this->assertResponseOk(); 
} 

또한 App::before() 필터의보기에 변수를 바인딩합니다. 변수가 정의되지 테스트 전에

class PagesController extends BaseController 
{ 
    public function about() 
    { 
     return View::make('pages.about')->withTitle("About"); 
    } 
} 

하지만, 내 테스트가 실패 :

App::before(function($request) 
{ 
    View::share('usersCount', User::remember(60)->count()); 
} 

여기에 내 컨트롤러이다. 다음은 PHPUnit의 실패한 출력입니다.

12) PagesControllerTest::testAboutPage 
ErrorException: Undefined variable: usersCount (View: app/views/layouts/application.blade.php) (View: app/views/layouts/application.blade.php) 

app/storage/views/ed261635437f52c903a09b2774ce5a92:20 
vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:41 
vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:56 
vendor/laravel/framework/src/Illuminate/View/View.php:134 
vendor/laravel/framework/src/Illuminate/View/View.php:102 
vendor/laravel/framework/src/Illuminate/View/View.php:76 
app/storage/views/5993084368b648c9a244ec6637315755:18 
vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:37 
vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:56 
vendor/laravel/framework/src/Illuminate/View/View.php:134 
vendor/laravel/framework/src/Illuminate/View/View.php:102 
vendor/laravel/framework/src/Illuminate/View/View.php:76 
vendor/laravel/framework/src/Illuminate/Http/Response.php:70 
vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php:202 
vendor/laravel/framework/src/Illuminate/Routing/Router.php:1413 
vendor/laravel/framework/src/Illuminate/Routing/Router.php:1003 
vendor/laravel/framework/src/Illuminate/Routing/Router.php:968 
vendor/laravel/framework/src/Illuminate/Foundation/Application.php:738 
vendor/laravel/framework/src/Illuminate/Foundation/Application.php:708 
vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81 
vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:319 
app/tests/controllers/PagesControllerTest.php:109 

이 문제를 해결하려면 어떻게해야합니까? 변수는 브라우저 또는 프로덕션에서 볼 때 잘됩니다.

+0

컨트롤러 코드를 게시 할 수 있습니까? –

+0

내 컨트롤러 코드가 추가되었습니다. 보시다시피, 매우 간단합니다. – Dwight

+0

당신의 오류는'testUnsubscribedPage' 메쏘드에 있지만'testAboutPage' 메쏘드의 코드 만 올렸습니다. –

답변

2

문서에서 필터가 사용 중지 된 것으로 나타났습니다. 나는 이것이 단지 라우트 파일에 정의 된 필터를 의미한다고 생각했지만, 필터 이전/이후에도 영향을 미친다.

참고 : 테스트 환경에서는 경로 필터를 사용할 수 없습니다. 활성화하려면 Route :: enableFilters()를 테스트에 추가하십시오.

나는 이것을 테스트에 추가하여 초록색으로 만들었습니다.

public function setUp() 
{ 
    parent::setUp(); 

    Route::enableFilters(); 
}