Я прочитал много постов о настройке модульного тестирования в Zend Framework, и мне просто не удалось запустить ни одного простого модульного теста.Проблема заключается в настройке и тестировании среды начальной загрузки.Я пробовал самые простые способы использования документов ZFW, но всегда получаю эту ошибку:
Zend_Config_Exception: parse_ini_file (/usr/local/zend/apache2/htdocs/APPBASE/tests/application.ini [function.parse-ini-file]: не удалось открыть поток: нет такого файла или каталога
Вот phpunit.xml:
<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="ApplicationTestSuite">
<directory>./application/</directory>
<directory>./library/</directory>
</testsuite>
<filter>
<whitelist>
<directory suffix=".php">../application</directory>
<directory suffix=".php">../application/library</directory>
<exclude>
<directory suffix=".phtml">../application/views</directory>
<file>../application/Bootstrap.php</file>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/coverage" charset="UTF-8"
yui="false" highlight="false" lowUpperBound="35" highLowerBound="70"/>
</logging>
</phpunit>
Вот мой загрузчик (tests / application / bootstrap.php):
<?php
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/library'),
get_include_path(),
)));
?>
Контроллер, который я пытаюсь проверить (тесты / приложение / контроллеры / AuthControllerTest.php):
<?php
require_once 'ControllerTestCase.php';
/**
* AuthController test case.
*/
class AuthControllerTest extends ControllerTestCase
{
/**
* @var AuthController
*/
private $AuthController;
/**
* Prepares the environment before running a test.
*/
public function setUp ()
{
parent::setUp();
// TODO Auto-generated AuthControllerTest::setUp()
$this->AuthController = new AuthController(/* parameters */);
}
/**
* Cleans up the environment after running a test.
*/
public function tearDown ()
{
// TODO Auto-generated AuthControllerTest::tearDown()
$this->AuthController = null;
parent::tearDown();
}
public function testCallWithoutActionShouldRedirectToLoginAction()
{
$this->dispatch('/auth');
$this->assertController('auth');
$this->assertAction('login');
}
}
и ControllerTestCase.php(в / test / application / controllers):
<?php
require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
abstract 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();
}
public function tearDown()
{
Zend_Controller_Front::getInstance()->resetInstance();
$this->resetRequest();
$this->resetResponse();
$this->request->setPost(array());
$this->request->setQuery(array());
}
}
my application.ini (APPBASE / configs / 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 = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] = ""
resources.view.doctype = "XHTML1_STRICT"
phpSettings.date.timezone = 'America/Chicago';
[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
Обратите внимание, что путь в сообщении об ошибкене совпадает с путем, указанным в моей начальной загрузке. В какой-то момент я подумал, что строка «$ this-> application-> bootstrap ();» может выполнять загрузку моего обычного приложения и изменять путь приложения, поэтому я закомментировал его, но у меня одна и та же ошибка, независимо от того.В Zend Studio с этим комментарием я получаю оригинальное исключение Zend Config.Если я запускаю phpunit из командной строки, он не может найти ни одного контроллера в моем приложении.Когда я раскомментирую и запускаю из командной строки, я получаю исключение Zend Config.Запуск в Zend Studio всегда приводит к исключению Zend Config.
Может кто-нибудь подсказать, почему я не могу правильно указать путь к приложению?