【发布时间】:2011-10-10 12:37:57
【问题描述】:
我正在尝试测试我的控制器。 我遵循了这个指南:
http://www.zendcasts.com/unit-testing-a ... s/2010/11/
一切都很好,直到我想在我的测试函数中使用这个调用: $this->dispatch('/'); 我认为问题在于引导,但我不知道如何解决这个问题。 我粘贴了我参与测试的文件:
application.ini = http://pastie.org/2248669
phpunit.xml =
<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="Application Test Suite">
<directory>./application</directory>
</testsuite>
<testsuite name="Library Test Suite">
<directory>./library</directory>
</testsuite>
<filter>
<!-- If Zend Framework is inside your project's library, uncomment this filter -->
<whitelist>
<directory suffix=".php">../application</directory>
<directory suffix=".php">../library/Kolcms</directory>
<exclude>
<directory suffix=".php">../library/Zend</directory>
<directory suffix=".php">../library/Kolcms/Model/DB</directory>
<directory suffix=".phtml">../library/</directory>
<directory suffix=".phtml">../application/</directory>
<file suffix=".php">../application/Bootstrap.php</file>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/report" charset="UTF-8"
yui="true" highlight = "true" lowUpperBound="50" highLowerBound="80" />
</logging>
bootstrap.php =
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));
// Define application environment
define('APPLICATION_ENV', 'testing');
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
realpath(APPLICATION_PATH . '/../../../Zend'),
get_include_path()
)));
/** Zend_Application */
require_once 'Zend/Application.php';
require_once 'ControllerTestCase.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
clearstatcache();
ControllerTestCase.php =
<?php
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
class ControllerTestCase
extends Zend_Test_PHPUnit_ControllerTestCase
{
/**
*
* @var Zend_Application
*/
protected $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()
{
$this->resetRequest();
$this->resetResponse();
parent::tearDown();
}
}
indexControllerTest.php =
<?php
include_once APPLICATION_PATH . '/modules/core/controllers/IndexController.php';
class Core_IndexControllerTest extends ControllerTestCase
{
public function testDefaultShouldInvokeAction()
{
$this->dispatch('/core/index/index');
$this->assertController('index');
$this->assertAction('index');
$this->assertModule('core');
}
}
这是我的 phpunit 输出:
$ phpunit
PHPUnit 3.5.5 by Sebastian Bergmann.
PHP Fatal error: Call to a member function hasResource() on a non-object in
/home/aykut/dev/kolonicms/application/modules/core/controllers/ErrorController.php on
line 49
Fatal error: Call to a member function hasResource() on a non-object in
/home/aykut/dev/kolonicms/application/modules/core/controllers/ErrorController.php
on line 49
请有人帮助我。 谢谢
【问题讨论】:
标签: php zend-framework controller phpunit