2016-02-29 2 views
0

У меня есть слушатель событий, установленный в модуле (он проверяет права доступа пользователей) в методе onBootstrap:Detach 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

В таком тесте вы не должны использовать реальный экземпляр слушателя из вашего приложения, но вы должны установить макет. Вы можете много узнать о том, как использовать mocks в модульных тестах PHP. Например here:

Это в основном включает в себя замену реального объекта с подделкой, или «издеваться», объектом, который мы полностью контролировать, удаляя все зависимости от внешних систем или коды, что мы на самом деле не имеем никакой необходимости, чтобы проверить

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

Теперь вы можете также использовать $mock, чтобы установить значения, которые вы хотите использовать во время теста.

Смежные вопросы