का उपयोग कर नियंत्रक के लिए सरल ZF2 यूनिट टेस्ट मुझे प्रमाणीकरण के लिए ZfcUser का उपयोग करने वाली क्रिया का परीक्षण करने की कोशिश करने में समस्याएं आ रही हैं। मुझे ZfcUser नियंत्रक प्लगइन का नकल करने के लिए कुछ तरीका चाहिए लेकिन मुझे यह सुनिश्चित नहीं है कि यह कैसे करें। मैंने तालिकाओं और मॉडलों के लिए कुछ यूनिट परीक्षणों को सफलतापूर्वक उत्पादन करने में कामयाब रहा है लेकिन नियंत्रक को बहुत से इंजेक्शन वाली वस्तुओं की आवश्यकता होती है और समस्याएं पैदा होती हैं। क्या किसी को पता है कि कैसे एक नियंत्रक परीक्षण सफलतापूर्वक इकाई के लिए ZfcUser mocks स्थापित करने के लिए?ZfcUser
<?php
namespace SmsTest\Controller;
use SmsTest\Bootstrap;
use Sms\Controller\SmsController;
use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;
use Zend\Mvc\Router\Http\TreeRouteStack as HttpRouter;
use PHPUnit_Framework_TestCase;
class SmsControllerTest extends PHPUnit_Framework_TestCase
{
protected $controller;
protected $request;
protected $response;
protected $routeMatch;
protected $event;
protected function setUp()
{
$serviceManager = Bootstrap::getServiceManager();
$this->controller = new SmsController();
$this->request = new Request();
$this->routeMatch = new RouteMatch(array('controller' => 'index'));
$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);
}
/* Test all actions can be accessed */
public function testIndexActionCanBeAccessed()
{
$this->routeMatch->setParam('action', 'index');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertEquals(200, $response->getStatusCode());
}
}
मैंने कोशिश की स्थापना के विधि में निम्नलिखित:
यहाँ मेरी परीक्षण (ZF2 ट्यूटोरियल से नकल) है
$mockAuth = $this->getMock('ZfcUser\Entity\UserInterface');
$authMock = $this->getMock('Zend\Authentication\AuthenticationService');
$authMock->expects($this->any())
->method('hasIdentity')
->will($this->returnValue(true));
$authMock->expects($this->any())
->method('getIdentity')
->will($this->returnValue(array('user_id' => 1)));
लेकिन मुझे यकीन है कि कैसे में इस सुई नहीं कर रहा हूँ नियंत्रक उदाहरण के लिए।
चलें नाटक मेरी सूचकांक कार्रवाई कोड इस प्रकार बस के रूप में है:
public function indexAction() {
//Check if logged in
if (!$this->zfcUserAuthentication()->hasIdentity()) {
return $this->redirect()->toRoute('zfcuser/login');
}
return new ViewModel(array(
'success' => true,
));
}
टेस्ट परिणाम:
1) SmsTest\Controller\SmsControllerTest::testIndexActionCanBeAccessed
Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:450
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/ServiceManager/AbstractPluginManager.php:110
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/PluginManager.php:90
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php:276
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php:291
/var/www/soap-app.localhost/Zend/module/Sms/src/Sms/Controller/SmsController.php:974
/var/www/soap-app.localhost/Zend/module/Sms/src/Sms/Controller/SmsController.php:974
/var/www/soap-app.localhost/Zend/module/Sms/src/Sms/Controller/SmsController.php:158
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php:87
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:468
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:208
/var/www/soap-app.localhost/Zend/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php:108
/var/www/soap-app.localhost/Zend/module/Sms/test/SmsTest/Controller/SmsControllerTest.php:57
लाइन जो इस अपवाद का कारण बनता है नियंत्रक है है: अगर (!$this->zfcUserAuthentication()->hasIdentity()) {
कि लाइन से संबंधित है SmsController में लाइन 974।
यह स्पष्ट है कि मुझे ZfcUser प्रमाणीकरण सेवा तक पहुंच नहीं है, इसलिए सवाल है, मैं ZfcUser प्रमाणीकरण सेवा का नकल कैसे करूं और इसे अपने नियंत्रक में इंजेक्ट कर सकता हूं?
विषय जारी रखने के लिए मैं सफलतापूर्वक परीक्षण करने के लिए उपयोगकर्ता में लॉग इन करने के बारे में कैसे जाउंगा, मेरी कार्रवाई का परीक्षण करने के लिए काम कर रहा है?