Simple ZF2 Unit Tests for a controller using ZfcUser

后端 未结 2 1476
旧时难觅i
旧时难觅i 2020-12-16 04:09

I\'m having issues trying to unit test an action which uses ZfcUser for authentication. I need some way to mock the ZfcUser Controller plugin but I\'m not so sure how to do

2条回答
  •  清酒与你
    2020-12-16 04:19

    The ZfcUser documentation suggests that this is a plugin so you need to inject this into the controller.

    You will need to amend your class names to pick up the ZfcUser classes

    Your mocks will also need to be addapted as getIdenty returns a different object.

    The following worked for me - insert in your phpunit setUp() method.

    $serviceManager = Bootstrap::getServiceManager();
    $this->controller = new RegisterController();
    $this->request    = new Request();
    $this->routeMatch = new RouteMatch(array('controller' => 'add'));
    $this->event      = new MvcEvent();
    $config = $serviceManager->get('Config');
    $routerConfig = isset($config['router']) ? $config['router'] : array();
    $router = HttpRouter::factory($routerConfig);
    $this->event->setRouter($router);
    $this->event->setRouteMatch($this->routeMatch);
    $this->controller->setEvent($this->event);
    $this->controller->setServiceLocator($serviceManager);
    $mockAuth = $this->getMock('ZfcUser\Entity\UserInterface');
    
    $ZfcUserMock = $this->getMock('ZfcUser\Entity\User');  
    
    $ZfcUserMock->expects($this->any())
                ->method('getId')
                ->will($this->returnValue('1'));
    
    $authMock = $this->getMock('ZfcUser\Controller\Plugin\ZfcUserAuthentication');
    
    $authMock->expects($this->any())
             ->method('hasIdentity')
                -> will($this->returnValue(true));  
    
    $authMock->expects($this->any())
             ->method('getIdentity')
             ->will($this->returnValue($ZfcUserMock));
    
    $this->controller->getPluginManager()
         ->setService('zfcUserAuthentication', $authMock);
    

    There may be an easier way would welcome other thoughts.

提交回复
热议问题