我已经设法使用Phing在我的Zend Framework项目中安装PHPUnit,以便在构建时通过Eclipse外部工具执行测试。我的测试是在构建时找到并执行的,但由于某种原因,页面中的PHP没有被解释。
为了弄清楚我的断言失败的原因,我在测试中添加了echo $this->response->outputBody();
并意识到它正在回应原始PHP。如果我添加echo get_class($this->response);
,我会得到Zend_Controller_Response_HttpTestCase作为类名,我收集的是正确的。
我在Apache遇到过这个问题,文件处理程序没有设置为通过PHP可执行文件发送PHP代码,但据我所知,这不应该是一个问题,因为Phing / PHPUnit应该处理执行一切通过可执行文件直接。我还不太了解PHPUnit或Phing如何知道我可能做错了什么。有什么建议吗?
这是我的测试类:
<?php
class SearchControllerTest extends ControllerTestCase
{
public function setUp()
{
parent::setUp();
}
public function testSearchPizzaChicago()
{
$this->_search('restaurants', 'chicago, il');
}
private function _search($what, $where)
{
$this->request->setMethod('POST');
$this->request->setPost(
array(
'search_what' => $what,
'search_where' => $where,
)
);
$this->dispatch(Zend_Registry::get('base_url') . '/search/results');
echo $this->response->outputBody();
//echo get_class($this->response);
$this->assertQuery('#results');
}
public function tearDown()
{
/* Tear Down Routine */
}
}
当我运行其中一个测试时,这是我的控制台输出:
Buildfile: C:\workspace\myproject\build.xml
myproject > test:
... raw PHP code here ...
[phpunit] Testsuite: SearchControllerTest
[phpunit] Tests run: 1, Failures: 1, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.25874 s
[phpunit] testSearchPizzaChicago FAILED
[phpunit] Failed asserting node DENOTED BY #results EXISTS
[phpunit] C:\workspace\frameworks\ZendFramework-1.11\library\Zend\Test\PHPUnit\Constraint\DomQuery.php:263
[phpunit] C:\workspace\frameworks\ZendFramework-1.11\library\Zend\Test\PHPUnit\ControllerTestCase.php:300
[phpunit] C:\workspace\myproject\tests\application\controllers\SearchControllerTest.php:34
[phpunit] C:\workspace\myproject\tests\application\controllers\SearchControllerTest.php:13
[phpunit] C:\wamp\bin\php\php5.3.5\PEAR\phing.php:37
BUILD FINISHED
Total time: 2.0895 seconds
答案 0 :(得分:1)
您正在执行POST请求 - 如果您的网络服务器运行正常,它将永远不会提供原始PHP代码。检查/search/results
脚本以查看它是否实际执行。由于您正在获取PHP代码,因此很可能它不被视为/被视为PHP脚本,而且其内容正在以纯文本形式提供。