2012-10-31 13 views
5

हाय सभी को एक साथ ज़ेंड करने के लिए एक नया है और Z2 के साथ विकसित करने के लिए कहा गया है। मैं नियंत्रक प्लगइन्स के माध्यम से पुन: प्रयोज्य कार्यक्षमता जोड़ने की कोशिश कर रहा हूं, लेकिन मुझे यूनिट परीक्षणों में सफलता नहीं मिल रही है। यह नियमित आवेदन के अंदर ठीक काम करता है।ज़ेंड फ्रेमवर्क 2 कंट्रोलर प्लगइन्स यूनिट परीक्षणों में अनुपलब्ध

// Application\Controller\Plugin\HelloWorld.php 
namespace Application\Controller\Plugin; 

use Zend\Mvc\Controller\Plugin\AbstractPlugin; 
use Zend\Http\Client; 
use Zend\Http\Request; 

class HelloWorld extends AbstractPlugin 
{ 

    public function helloWorld() 
    { 
     return "HELLO WORLD"; 
    } 
} 

// Application\Controller\IndexController.php 
namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class IndexController extends AbstractActionController 
{ 

    public function indexAction() 
    { 
     echo $this->helloworld()->helloWorld(); 
    } 
} 

//Application\config\module.config.php 
... 
'controller_plugins' => array(
    'invokables' => array(
      'helloworld' => 'Application\Controller\Plugin\HelloWorld', 
    ), 
), 
... 

त्रुटि मैं मिलता है:

Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for helloworld 

उत्तर

12

आप एक नियंत्रक के लिए एक इकाई परीक्षण बनाते हैं, तो आप एक समर्पित, नियंत्रित इकाई में नियंत्रक का परीक्षण करें। आप एप्लिकेशन को प्रारंभ नहीं करते हैं, आप मॉड्यूल लोड नहीं करते हैं और आप पूर्ण कॉन्फ़िगरेशन फ़ाइल को पार्स नहीं करते हैं।

यूनिट को नियंत्रक का परीक्षण करने के लिए, प्लगइन को setUp() विधि में स्वयं को सेवा प्रबंधक में सीधे अनावश्यक के रूप में जोड़ने के लिए जोड़ें। यदि आप जांचना चाहते हैं कि आपका कॉन्फ़िगरेशन काम करता है, तो आप कार्यात्मक परीक्षण को देख रहे हैं। पहले पूर्ण एप्लिकेशन को बूटस्ट्रैप करने का प्रयास करें और फिर अनुरोध करके और प्रतिक्रिया देने के द्वारा अपने नियंत्रक का परीक्षण करें।

क्योंकि कार्यात्मक परीक्षण थोड़ा मुश्किल हल करने के लिए हैं, यह नियंत्रक के साथ शुरू करने के लिए आसान है (प्लग-इन) एक इकाई परीक्षण में परीक्षण करने के लिए:

namespace SlmLocaleTest\Locale; 

use PHPUnit_Framework_TestCase as TestCase; 
use Application\Controller\IndexController; 

class IndexControllerTest extends TestCase 
{ 
    public function setUp() 
    { 
     $controller = new IndexController; 
     $controller->getPluginManager() 
        ->setInvokableClass('helloworld', 'Application\Controller\Plugin\HelloWorld'); 

     $this->controller = $controller; 
    } 

    public function testCheckSomethingHere() 
    { 
     $response = $this->controller->indexAction(); 
    } 
} 

आप setService() द्वारा setInvokableClass() जगह ले सकता है, उदाहरण के लिए एक नकली सुई ।

+0

आपको बहुत बहुत धन्यवाद !!! वह मुझे मार रहा था! –

+0

यह एक प्राचीन उत्तर है, लेकिन यदि आप अभी भी जूरियन के आसपास हैं, या अन्य लोगों को यह जवाब मिल रहा है ... जैसे ही आप इसे $-- नियंत्रक-> इंडेक्सएक्शन() कहते हैं, मुझे लगता है कि आप परेशानी में हैं क्योंकि इसकी संभावना है कि एक नियंत्रक कार्रवाई नियंत्रक को प्राप्त करने वाले नियंत्रक नियंत्रक वर्ग से कुछ कॉल करेगा। कोई ढांचा प्रारंभिक नहीं, कोई काम नहीं। –

+0

ग्रेग होने की आवश्यकता नहीं है, अगर आपकी अनुक्रमणिका में किसी भी अमूर्त विधि में कॉल नहीं है, तो सब ठीक है। –