我无法在Kohana 3.2中正确设置单元测试。
我安装了PHPUnit。我更改了引导程序以激活Kohana的unittest模块。我还将index.php文件更改为如下所示:
if ( ! defined('SUPPRESS_REQUEST'))
{
echo Request::factory()
->execute()
->send_headers()
->body();
}
我在应用程序文件夹中创建了一个文件夹测试。在其中,我插入了一个如下所示的phpunit.xml文件:
<phpunit colors="true" bootstrap="../../index.php">
<testsuites>
<testsuite name="Kohana Tests">
<directory>./</directory>
</testsuite>
</testsuites>
我遇到两个问题(第一个是我真正需要回答的问题):
1-当我从命令行进入测试并尝试运行phpunit时,似乎SUPPRESS_REQUEST永远不会设置为true。请求已执行,因此不会运行任何测试。我能够成功运行测试的唯一方法是暂时注释掉index.php中的整个Request :: factory()行。有谁知道如何解决这个问题?如果我应该在某处添加一个define('SUPPRESS_REQUEST',true),我应该在哪里做?我是Kohana和PHPUnit的新手。
2- PHPUnit抱怨未设置变量REMOTE_ADDR。
PHP Notice: Undefined index: REMOTE_ADDR in
/Users/**/Sites/root/application/bootstrap.php on line 76
现在这实际上不是一个大问题,因为测试似乎仍在运行,但是我想知道是否有人知道我是否应该在特定的某处设置此变量。
答案 0 :(得分:2)
在modules / unittest中有一个名为bootstrap.php的文件,与phpunit完美配合。
我引用该引导程序的phpunit.xml是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="../../modules/unittest/bootstrap.php">
<testsuites>
<testsuite name="Kohana Tests">
<directory>./</directory>
</testsuite>
</testsuites>
</phpunit>
另外,对于REMOTE_ADDR问题,当phpunit运行PHP的CLI版本时,我认为它不能访问REMOTE_ADDR变量。如果你看一下unittest的bootstrap,它就不会使用与http相关的全局变量。
我不确定为什么你必须在你的bootstrap中运行Request :: factory代码。在我的vanilla 3.2安装中,Request :: factory代码位于index.php而不是bootstrap.php,并且没有任何对SUPRESS REQUEST的引用。您可能会在3.2之前的安装中找到一些需要清理的延迟文件。