2012-01-06 10 views
6

मैं नियंत्रक का परीक्षण करने की कोशिश कर रहा हूं। Zend उपकरण निम्नलिखित कोड उत्पन्न किया है:Zend_Controller_Router_Exception: रूट डिफ़ॉल्ट परिभाषित नहीं किया गया है

class Default_CarrinhoControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 

public function setUp() 
{ 
    $this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); 
    parent::setUp(); 
} 

public function testIndexAction() 
{ 
    $params = array('action' => 'index', 'controller' => 'Carrinho', 'module' => 'default'); 
    $urlParams = $this->urlizeOptions($params); 
    $url = $this->url($urlParams); 
    $this->dispatch($url); 

    // assertions 
    $this->assertModule($urlParams['module']); 
    $this->assertController($urlParams['controller']); 
    $this->assertAction($urlParams['action']); 
    $this->assertQueryContentContains(
     'div#view-content p', 
     'View script for controller <b>' . $params['controller'] . '</b> and script/action name <b>' . $params['action'] . '</b>' 
     ); 
    } 
} 

PHPUnit बूटस्ट्रैप

<?php 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')   : 'testing')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
     realpath(APPLICATION_PATH . '/../library'), 
     get_include_path(), 
    ))); 

require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

// Create application, bootstrap, and run 
$application = new Zend_Application(
      APPLICATION_ENV, 
      APPLICATION_PATH . '/configs/application.ini' 
); 

लेकिन यह नाकाम रही है और मार्ग सही है

Default_CarrinhoControllerTest::testIndexAction() 
Zend_Controller_Router_Exception: Route default is not defined 
C:\xampp\ZendFramework-1.11.11\library\Zend\Controller\Router\Rewrite.php:318 
C:\xampp\ZendFramework-1.11.11\library\Zend\Controller\Router\Rewrite.php:469 
C:\xampp\ZendFramework-1.11.11\library\Zend\Test\PHPUnit\ControllerTestCase.php:1180 
C:\htdocs\farmaciaonline\FarmaciaOnlineWeb\tests\application\modules\default\controllers\CarrinhoControllerTest.php:16 
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:939 
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:801 
C:\xampp\php\PEAR\PHPUnit\Framework\TestResult.php:649 
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:748 
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:772 
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:745 
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:705 
C:\xampp\php\PEAR\PHPUnit\TextUI\TestRunner.php:325 
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:187 
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:125 
C:\xampp\php\phpunit:44 

मैं डिफ़ॉल्ट PHPUnit Zend उपकरण के द्वारा बूटस्ट्रैप चला करती है, मैंने कुछ कस्टम मार्ग निर्धारित किए हैं लेकिन डिफ़ॉल्ट मार्ग अभी भी एप्लिकेशन पर काम कर रहे हैं। क्या गलत हो सकता है?

+0

एक मॉड्यूलर लेआउट में अपनी परियोजना सेटअप है? यह भी '$ यह-> देखें-> url()' है? – nav

+0

@nav हां यह मॉड्यूलर है। $ this-> url() यह डिफ़ॉल्ट है, $ this-> view-> url() गैर-ऑब्जेक्ट त्रुटि लौटाता है। – dextervip

उत्तर

7

ऐसा लगता है कि कस्टम मार्ग निर्धारित किए जाने पर issue with the the Controller Test Case डिफ़ॉल्ट मार्ग सेट नहीं कर रहा है (यह ढांचे की तुलना में एक अलग व्यवहार है)।

मुद्दे से पैच:

/** 
* URL Helper 
* 
* @param array $urlOptions 
* @param string $name 
* @param bool $reset 
* @param bool $encode 
*/ 
public function url($urlOptions = array(), $name = null, $reset = false, $encode = true, $default = false) 
{ 
    $frontController = $this->getFrontController(); 
    $router = $frontController->getRouter(); 
    if (!$router instanceof Zend_Controller_Router_Rewrite) { 
     throw new Exception('This url helper utility function only works when the router is of type Zend_Controller_Router_Rewrite'); 
    } 
    if ($default) { 
     $router->addDefaultRoutes(); 
    } 
    return $router->assemble($urlOptions, $name, $reset, $encode); 
} 

जब url() समारोह का उपयोग कर आप true पिछले तर्क के रूप में पारित करने के लिए की आवश्यकता होगी।

इसके बजाय टेस्ट केस पैचिंग के

, तो आप सिर्फ बूटस्ट्रैप प्रक्रिया में डिफ़ॉल्ट मार्गों किसी ऐसे स्थान पर जोड़ सकते हैं:

$frontController->getRouter()->addDefaultRoutes(); 
+0

इसने मेरी समस्या हल कर दी है। धन्यवाद :) – dextervip

+0

@ राफेल मेरा भी हल किया - इसलिए मुझे साझा करने में खुशी हुई। क्या आपने इसे पैच किया था, या बस बूटस्ट्रैप में डिफ़ॉल्ट मार्ग जोड़ते हैं? –

+0

मैंने डिफ़ॉल्ट मार्ग जोड़े हैं। मैं पैच लगाने के द्वारा ज़ेंडफ्रेमवर्क टीम को इस मुद्दे को हल करने का इंतजार करूंगा। – dextervip

0

यह एक सामान्य समस्या की तरह लगता है कि आपने अपने ऐप को बूटस्ट्रैप में ठीक से कॉन्फ़िगर नहीं किया है और फिर एक अनुरोध का आह्वान किया है जो एक अपरिभाषित मार्ग की ओर जाता है। आपके मामले में मार्ग Route default के रूप में निर्दिष्ट किया गया है।

मार्ग सही हो सकता है लेकिन अभी अपरिभाषित है।

डिबगिंग उद्देश्यों के लिए, $url आउटपुट करें ताकि आप यह देख सकें कि आप क्या देख रहे हैं।

+0

$ url यह एक खाली सरणी है, मैं सभी डिफ़ॉल्ट मार्गों को फिर से कैसे परिभाषित कर सकता हूं? – dextervip

+0

आपको ज़ेंड फ्रेमवर्क के लिए संपूर्ण अनुरोध तर्क सेट अप करने की आवश्यकता है, इसलिए यह आपके नियंत्रक को चलाने के लिए पर्याप्त रूप से पर्याप्त महसूस करता है। यह बहुत अजीब और गैर-तुच्छ है। – hakre

संबंधित मुद्दे