gpt4 book ai didi

exception - 在 zend 框架中运行 Controller 单元测试时出现 "No default module defined for this application"异常

转载 作者:行者123 更新时间:2023-12-04 02:08:42 24 4
gpt4 key购买 nike

我有一个具有默认目录结构的应用程序,用于没有自定义模块的应用程序(参见最后的结构图)。

我已经按照许多教程中的说明编写了一个 ControllerTestCase.php 文件,并且我还创建了适当的引导文件(再一次,请参见最后的图)。

我已经编写了一些运行良好的模型测试,但是当我开始编写索引 Controller 测试文件时,其中只有一个测试,其中只有一行 ("$this->dispatch('/');"),我在运行 phpunit 时遇到以下异常(但使用浏览器导航到同一位置 - 一切都很好并且工作正常):

1) IndexControllerTest::test_indexAction_noParams
Zend_Controller_Exception: No default module defined for this application

为什么是这样 ?我做错了什么?

附录:
目录结构:
-proj/
-application/
-controllers/
-IndexController.php
-ErrorController.php
-config/
-layouts/
-models/
-views/
-helpers/
-scripts/
-error/
-error.phtml
-index/
-index.phtml
-Bootstrap.php
-library/
-tests/
-application/
-controllers/
-IndexControllerTest.php
-models/
-bootstrap.php
-ControllerTestCase.php
-library/
-phpunit.xml
-public/
-index.php

(基本上我在模型目录中有更多文件,但这与这个问题无关。)

application.ini 文件:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "My"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] =
phpSettings.date.timezone = "America/Los_Angeles"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

测试/应用程序/bootstrap.php 文件:
<?php 
error_reporting(E_ALL);
// 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'), // this project' library
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

require_once 'ControllerTestCase.php';

ControllerTestCase.php 文件:
<?php
require_once ('Zend/Test/PHPUnit/ControllerTestCase.php');
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {
/**
*
* @var Zend_Application
*/
protected $application;

protected function setUp(){
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}

public function appBootstrap(){
$this->application = new Zend_Application(APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini');

}
}

最佳答案

这是一个已知的错误。
这是我解决此问题的解决方法:

<?php
require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
protected $_application;

protected function setUp()
{
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}

public function appBootstrap()
{
$this->_application = new Zend_Application(APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$this->_application->bootstrap();

/**
* Fix for ZF-8193
* http://framework.zend.com/issues/browse/ZF-8193
* Zend_Controller_Action->getInvokeArg('bootstrap') doesn't work
* under the unit testing environment.
*/
$front = Zend_Controller_Front::getInstance();
if($front->getParam('bootstrap') === null) {
$front->setParam('bootstrap', $this->_application->getBootstrap());
}
}
}

关于exception - 在 zend 框架中运行 Controller 单元测试时出现 "No default module defined for this application"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com