Зенд_Тест:Для этого приложения не определен модуль по умолчанию

StackOverflow https://stackoverflow.com/questions/4507165

Вопрос

ОБНОВЛЕНИЕ 23 декабря

У меня возникла проблема, когда Zend Framework жаловался: «Для этого приложения не определен модуль по умолчанию».Я не использовал модули, и основное приложение работает нормально.

Я наконец решил проблему с помощью Weierophinney.net

Ваша загрузочная программа должна минимально установить каталог контроллера — выполните вызов $this->frontController->addControllerDirectory(...) в вашей appBootstrap() метод.В моем примере я этого не сделал, поскольку мой плагин инициализации делает подобные вещи за меня.

Проблема решается добавлением приведенного ниже кода в 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

ОБНОВЛЯТЬ

Я попробовал добавить

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');
}
Это было полезно?

Решение

Кажется, решение состоит в том, чтобы иметь это 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().Почему это?

Другие советы

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

if($this->getFrontController()->getParam('bootstrap') === null) {
    $this->getFrontController()->setParam('bootstrap', $app->getBootstrap());
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top