2016-02-29 66 views
0

我有一個事件監聽器模塊中設立(它檢查用戶權限)在onBootstrap方法:單元中拆離ZF2事件監聽測試

// attach permission listener to route event 
$eventManager = $e->getApplication()->getEventManager(); 
$sm = $e->getApplication()->getServiceManager(); 
$permissionsListener = $sm->get('MyModule\Listener\Permissions'); 
$permissionsListener->attach($eventManager); 

它的工作原理行中正常應用。

對於單元測試,如果我可以禁用此權限系統來輕鬆檢查所有頁面是否正常工作,而不用擔心設置假的管理員用戶,那將是一件好事。

但我不知道該怎麼做。

在我的測試,它擴展AbstractHttpControllerTestCase,我已經做了這樣的事情:

// detach permission listener to route event 
$sm = Bootstrap::getServiceManager(); 
$eventManager = $this->getApplication()->getEventManager(); 
$permissionsListener = $sm->get('MyModule\Listener\Permissions'); 
$permissionsListener->detach($eventManager); 

但這並不禁用許可制度。如何才能做到這一點?

+0

您是否試過嘲笑權限監聽器?我們在我們的項目中有類似的設置。我們在單元測試中做的也是嘲笑聽衆 – PrinceG

回答

0

在這樣的測試案例,你不應該從你的應用程序中使用真正監聽器實例,但你應該設定一個模擬。您可以閱讀很多關於如何在PHP單元測試教程中使用mocks的信息。例如here

它基本上包括了假,還是「假」,對象替換實際的對象,我們完全控制,消除對外部系統或代碼,我們真的沒有必要測試所有的依賴

$className = 'MyModule\Listener\Permissions'; 
$mock = $this->getMockBuilder($className)->getMock(); 

現在你也可以使用$mock設置要在測試過程中使用的值。