ОБНОВЛЕНИЕ 23 декабря
У меня была проблема, когда Zend Framework жалуется на "Модуль по умолчанию не определен для этого приложения". Я не использовал модули, и основное приложение работает нормально.
Я наконец решил проблему с помощью weierophinney.net
Ваша начальная загрузка должна минимально установить каталог контроллера - вызовите $this->frontController->addControllerDirectory(...)
в вашем методе appBootstrap()
. В моем примере я этого не сделал, так как мой плагин Initialization делает такие вещи для меня.
Проблема решена путем добавления ниже к setUp()
$this->getFrontController()->setControllerDirectory(APPLICATION_PATH . '/controllers');
Но теперь у меня есть еще несколько вопросов:
1. Почему это значение не инициализируется application.ini
?
В application.ini
, у меня
[production]
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
[testing : production]
// didn't change anything regarding modules nor controllers
2. Я попытался установить controllerDirectory
в bootstrap.php
моего модульного теста, но он не работает
$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory(APPLICATION_PATH . '/controllers');
Единственный способ, который работает, - это setUp()
. Почему это так?
ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ 23 декабря
Я получаю вышеуказанную ошибку при модульном тестировании плагинов моего контроллера. Я не использую никаких модулей. в моем bootstrap.php для модульного тестирования я даже попытался добавить
$front = Zend_Controller_Front::getInstance();
$front->setDefaultModule('default');
Но это все равно не работает. В любом случае мой bootstrap.php выглядит как это
ОБНОВЛЕНИЕ : ошибка выглядит примерно так:
Было 2 ошибки:
1) Application_Controller_Plugin_AclTest::testAccessToUnauthorizedPageRedirectsToLogin
Zend_Controller_Exception: No default module defined for this application
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:391
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:204
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:244
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Front.php:954
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Test\PHPUnit\ControllerTestCase.php:205
D:\Projects\Tickle\tests\application\controllers\plugins\aclTest.php:6
2) Application_Controller_Plugin_AclTest::testAccessToAllowedPageWorks
Zend_Controller_Exception: No default module defined for this application
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:391
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:204
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Dispatcher\Standard.php:244
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Controller\Front.php:954
D:\ResourceLibrary\Frameworks\PHPFrameworks\Zend\Test\PHPUnit\ControllerTestCase.php:205
D:\Projects\Tickle\tests\application\controllers\plugins\aclTest.php:16
UPDATE
Я пытался добавить
public function setUp() {
$front = Zend_Controller_Front::getInstance();
$front->setDefaultModule('default');
}
тогда 1 часть работает.
public function testAccessToUnauthorizedPageRedirectsToLogin() { // this fails with exception "Zend_Controller_Exception: No default module defined for this application"
$this->dispatch('/projects');
$this->assertController('auth');
$this->assertAction('login');
}
public function testAccessToAllowedPageWorks() { // this passes
$auth = Zend_Auth::getInstance();
$authAdapter = new Application_Auth_Adapter('jiewmeng', 'password');
$auth->authenticate($authAdapter);
$this->dispatch('/projects');
$this->assertController('projects');
$this->assertAction('index');
}