我正在使用 Zend Framework v1.11.0 开发 Web 应用程序,但我无法为控制器测试设置正确的测试环境。我知道已经有很多关于设置 Zend 测试的问题,但是,经过数小时的研究,这些都没有解决我的问题。所以这是我的代码:
测试引导:
<?php
error_reporting(E_ALL | E_STRICT);
defined('APPLICATION_PATH') || define('APPLICATION_PATH',realpath(dirname(__FILE__).'/../../application'));
define('APPLICATION_ENV', 'testing');
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library'), get_include_path())));
require_once ('Zend/Application.php');
require_once ('ControllerTestCase.php');
控制器测试用例:
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {
public $application;
public 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();
}
}
简单测试:
class IndexControllerTest extends ControllerTestCase {
public function testDefaultShouldInvokeIndexAction()
{
$this->dispatch('/');
$this->assertModule('default');
$this->assertController('index');
$this->assertAction('index');
}
}
每次我运行这个测试时,PHPUnit 都会抛出一个致命的错误消息,在我的库中没有找到在我的 IndexController 中使用的类。因此,我认为原因一定与自动加载器有关。调试后我发现,测试通过常规 Bootstrap 运行,通过 Auth 插件等等,并且包括我的库。所以我不知道 PHPUnit 的问题可能是什么。在浏览器中一切正常,命令行中的非控制器测试(例如全局设置)也可以正常工作。
我将非常感谢任何提示我需要做什么才能让我的控制器测试正常工作!
编辑:我的目录结构看起来像这样(出于某些原因,我将我的类分成不同的库)
project
- library1
- library2
- project_name
->application
->library3
->library4
->tests
->>application
->>>ControllerTestCase.php
->>>Bootstrap.php
->>Controller
->>>IndexControllerTest.php
我的包含路径实际上看起来像:
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library3'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../library4'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library1'), get_include_path())));
set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH.'/../../library2'), get_include_path())));