Настраиваю связку NetBeans + PHPUnit + Zend Framework в Ubuntu. Все замечательно кроме одной ошибки при выполнении тестов вылезающей после добавления простого пользовательского маршрута. Для чистоты эксперимента приведу лог операций простого проекта созданного в консоли:
$ zf show version
Zend Framework Version: 1.11.6
$ zf create project gametest
Creating project at /path/to/gametest
Note: This command created a web project, for more information setting up your VHOST, please see docs/README
$ cd gametest/
$ zf create controller Account
Creating a controller at /path/to/gametest/application/controllers/AccountController.php
Creating an index action method in controller Account
Creating a view script for the index action method at /path/to/gametest/application/views/scripts/account/index.phtml
Creating a controller test file at /path/to/gametest/tests/application/controllers/AccountControllerTest.php
Updating project profile '/path/to/gametest/.zfproject.xml'
$ zf create action login Account
Creating an action named login inside controller at /path/to/gametest/application/controllers/AccountController.php
Creating an action test in /path/to/gametest/tests/application/controllers/AccountControllerTest.php
Updating project profile '/path/to/gametest/.zfproject.xml'
Creating a view script for the login action method at /path/to/gametest/application/views/scripts/account/login.phtml
Updating project profile '/path/to/gametest/.zfproject.xml'
Таким образом имеем проект с дополнительным loginAction() в одном контроллере Account. Настроил для проекта виртуальный хост. При запросе адреса: http://gametest/account/login в браузере отображается следующее:
View script for controller Account and script/action name login
Далее я хочу попадать на эту страницу имея укороченный адрес: http://gametest/login
Вношу свой метод в класс в файле application/Bootstrap.php следующего содержания:
public function _initMyRoutes()
{
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route_Static('login',
array('controller' => 'Account', 'action' =>'login'));
$router->addRoute('account', $route);
}
Теперь адрес http://gametest/login работает как и ожидалось.
Однако! Выполнение тестов показывает следующий результат:
$ pwd
/path/to/gametest
$ phpunit --colors --bootstrap tests/bootstrap.php tests/
PHPUnit 3.5.13 by Sebastian Bergmann.
EEE
Time: 0 seconds, Memory: 11.00Mb
There were 3 errors:
1) AccountControllerTest::testIndexAction
Zend_Controller_Router_Exception: Route default is not defined
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:318
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:464
/path/to/ZendFramework-1.11.6/library/Zend/Test/PHPUnit/ControllerTestCase.php:1180
/path/to/gametest/tests/application/controllers/AccountControllerTest.php:16
2) AccountControllerTest::testLoginAction
Zend_Controller_Router_Exception: Route default is not defined
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:318
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:464
/path/to/ZendFramework-1.11.6/library/Zend/Test/PHPUnit/ControllerTestCase.php:1180
/path/to/gametest/tests/application/controllers/AccountControllerTest.php:33
3) IndexControllerTest::testIndexAction
Zend_Controller_Router_Exception: Route default is not defined
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:318
/path/to/ZendFramework-1.11.6/library/Zend/Controller/Router/Rewrite.php:464
/path/to/ZendFramework-1.11.6/library/Zend/Test/PHPUnit/ControllerTestCase.php:1180
/path/to/gametest/tests/application/controllers/IndexControllerTest.php:16
FAILURES!
Tests: 3, Assertions: 0, Errors: 3.
Данный пример приведен полностью, никаких дополнительных команд и правок в проект не вносилось. Думаю всё это хозяйство воспроизведется у Вас без проблем.
Собственно вопрос, что это за ошибка, и как с ней бороться? В NetBeans очень удобно работает эта связка, тесты и прочее. Развивая проект далее хотелось делать это через тестирование. И вот все застопорилось.