Zend_Controller_Router_Exception: Default route not defined

I am trying to test a controller. The Zend Tool created the following code:

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

But he failed, and the route is correct.

  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 

I have the default phpunit bootstrap using the zend tool, I set some custom routes, but the default routes still work on the application. What could be wrong?

+6
source share
2 answers

It seems that the problem with the Controller test does not set the default route if custom routes are configured (this is different than the structure).

Patch from the problem:

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

You need to pass true as the last argument when using the url() function.

Instead of fixing the test case, you can simply add default routes to the boot process:

 $frontController->getRouter()->addDefaultRoutes(); 
+7
source

This sounds like a typical problem that you did not configure for your application at boot, and then you call a query that leads to an undefined route. In your case, the route is listed as Route default .

The route may be correct, but only undefined.

For debugging purposes, print the $url that you call to see what happens.

0
source

Source: https://habr.com/ru/post/905369/


All Articles