uczyłem się o testów jednostkowych i starałem się rozwiązać następujący problem:ZF2 uwierzytelniania jednostka testowanie
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
... używając tylko odpowiedź udzieloną na:
Simple ZF2 Unit Tests for a controller using ZfcUser
So moja funkcja setUp wygląda tak samo. Niestety, pojawia się komunikat o błędzie:
Zend\Mvc\Exception\InvalidPluginException: Plugin of type Mock_ZfcUserAuthentication_868bf824 is invalid; must implement Zend\Mvc\Controller\Plugin\PluginInterface
jest to spowodowane w tej części kodu (Split w moim kodzie w taki sam sposób): Object
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock); // Error refers to this line.
$ authMock nie jest najwyraźniej implementacja plugininterface, którą muszę zaimplementować, aby przejść do setService.
Czy $ authMock nie ma być tam przekazywane, ponieważ jest używane podczas testów jednostkowych? Czy powinienem używać innej metody setService (zorientowanej na testowanie jednostkowe)?
Potrzebuję sposobu na zajęcie się logowaniem do mojej aplikacji lub testowanie mojego urządzenia jest bezcelowe.
Dzięki za radę.
=== Edit (02.11.2013) ===
Chciałem skupić się na tej części wyjaśnienia, jak myślę, że jest to obszar problemu:
// Getting mock of authentication object, which is used as a plugin.
$authMock = $this->getMock('ZfcUser\Controller\Plugin\ZfcUserAuthentication');
// Some expectations of the authentication service.
$authMock -> expects($this->any())
-> method('hasIdentity')
-> will($this->returnValue(true));
$authMock -> expects($this->any())
-> method('getIdentity')
-> will($this->returnValue($ZfcUserMock));
// At this point, PluginManager disallows mock being assigned as plugin because
// it will not implement plugin interface, as mentioned.
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock);
Jeśli mock nie obsługuje koniecznych implementacji, jak inaczej mam udawać logowanie?
Czy to prawda, że nie jest to konieczne dla sterowników testujących urządzenia, ponieważ jest to model? Uważam, że to jest miejsce, w którym przechowuję cały mój kod uwierzytelniający. – Shoreline
Zrobiłem coś podobnego niedawno bez problemu. Jak wygląda twoja pełna klasa testcase? Jak wygląda twój bootstrap testowy? I wreszcie akcja, którą próbujesz przetestować. – Ruben
Czy korzystasz ze specjalnej konfiguracji aplikacji podczas testowania urządzenia? W takim przypadku moduł zfcUser nie jest ładowany w środowisku testowym. – SmasherHell