Я работаю над веб-приложением с Zend Framework v1.11.0, но мне не удается настроить правильную среду тестирования для тестов контроллера.Я знаю, что уже есть много вопросов о настройке теста Zend, однако после нескольких часов исследований ни один из них не решил мою проблему.Итак, вот мой код:
Test Bootstrap:
<?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');
ControllerTestCase:
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.В браузере все работает отлично, и неконтроллерные тесты в командной строке (например, глобальные настройки) тоже работают.
Я был бы очень благодарен за любой совет, что мне нужно сделать, чтобы мои тесты контроллера работали!
edit: моя структура каталогов выглядит следующим образом (по определенным причинам я разделил свои классы на разные библиотеки)
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())));