zend tutorial framework zend-framework phpunit zend-route zend-test

zend framework - tutorial - Zend_Controller_Router_Exception: ruta predeterminada no está definida



zend framework tutorial (2)

Esto suena como un problema típico de que no ha configurado su aplicación correctamente en el arranque y luego invocando una solicitud que conduce a una ruta indefinida. En su caso, la ruta se especifica como Route default .

La ruta puede ser correcta pero no definida.

Para fines de depuración, imprima el $url que invoca para que vea lo que está sucediendo.

Estoy tratando de probar un controlador. Zend Tool ha generado el siguiente código:

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 Bootstrap

<?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'' );

Pero ha fallado y la ruta es correcta

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

Tengo el bootstrap generado por phpunit predeterminado por la herramienta zend, configuré algunas rutas personalizadas pero las rutas predeterminadas todavía están funcionando en la aplicación. ¿Qué podría estar mal?


Parece que hay un problema con el caso de prueba del controlador que no establece la ruta predeterminada, si se han establecido rutas personalizadas (este es un comportamiento diferente al del marco).

El parche del problema:

/** * 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); }

Tendrá que pasar true como el último argumento cuando use la función url() .

En lugar de parchear el caso de prueba, puede agregar las rutas predeterminadas en algún lugar en el proceso de arranque:

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