2012-01-06 6 views
6

Estoy intentando probar un controlador. Zend herramienta ha generado el siguiente código:Zend_Controller_Router_Exception: ruta predeterminada no está definida

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 

He generado el PHPUnit por defecto de arranque por la herramienta Zend, He configurado algunas rutas personalizadas, pero las rutas predeterminadas todavía están funcionando en la aplicación. ¿Qué podría estar mal?

+0

Es el proyecto de instalación de una estructura modular? Además, ¿no es '$ this-> view-> url()'? – nav

+0

@nav Sí, es modular. $ this-> url() es el error predeterminado, $ this-> view-> url() return no-object. – dextervip

Respuesta

7

Parece que hay un issue with the the Controller Test Case que no establece la ruta predeterminada, si se han establecido rutas personalizadas (este es un comportamiento diferente del marco).

El parche de la cuestión:

/** 
* 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 último argumento al utilizar la función url().

En lugar de un parche en el caso de prueba, sólo puede añadir algún lugar de las rutas por defecto en el proceso de arranque:

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

Ha solucionado mi problema. Gracias :) – dextervip

+0

@Rafael Solucionado el mío también, así que me complace compartirlo. ¿Lo parcheó o simplemente agregó las rutas predeterminadas en el programa de arranque? –

+0

He agregado las rutas predeterminadas. Voy a esperar que el equipo de zendframework resuelva el problema aplicando el parche. – dextervip

0

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 está definida.

Para depuración, envíe el $url que invoca para que vea lo que está pasando.

+0

$ url es una matriz vacía, ¿cómo puedo redirigir todas las rutas predeterminadas? – dextervip

+0

Necesita configurar toda la lógica de solicitud para Zend Framework, por lo que se siente lo suficientemente bien como para ejecutar su controlador. Eso es bastante incómodo y no trivial. – hakre

Cuestiones relacionadas