Zend_Test: для этого приложения не определен модуль по умолчанию - PullRequest
3 голосов
/ 22 декабря 2010

ОБНОВЛЕНИЕ 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');
}

Ответы [ 2 ]

3 голосов
/ 25 декабря 2010

Решение, похоже, состоит в том, чтобы это было 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

. '/ контроллеры');

Единственный способ, который работает, это использование setUp(). Почему это так?

1 голос
/ 09 февраля 2012

У меня была та же самая ошибка, но это не решало ошибку вообще. Ни в методе setUp (), ни в плагине. Но настройка ресурса начальной загрузки решила это, хотя это обычно устанавливается моим приложением. В моем случае сработало следующее:

if($this->getFrontController()->getParam('bootstrap') === null) {
    $this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}
...