使用Kohana 3.2运行PHPUnit时抑制请求

时间:2012-03-25 03:00:23

标签: phpunit kohana-3.2

我无法在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

现在这实际上不是一个大问题,因为测试似乎仍在运行,但是我想知道是否有人知道我是否应该在特定的某处设置此变量。

1 个答案:

答案 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之前的安装中找到一些需要清理的延迟文件。