2012-03-25 67 views
1

我在Kohana 3.2中正确设置单元测试时遇到了问题。使用Kohana运行PHPUnit时抑制请求3.2

我安装了PHPUnit。我改变了引导来激活Kohana的单元测试模块。我也改变了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 

这其实不是一个很大的问题,现在的测试似乎仍然尽管如此跑,但我想知道如果有人知道我是否应该在特定的地方设置这个变量。

回答

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相关的全局变量。

我不知道为什么你必须在引导程序中运行Request :: factory代码。在我的vanilla 3.2安装中,Request :: factory代码存在于index.php中,而不是bootstrap.php,并且没有任何对SUPRESS REQUEST的引用。你可能有一些需要清理的3.2之前的安装文件。

+0

谢谢你,你是对的,那确实是问题所在。我正在学习一个指向index.php的教程(实际上,在我的Request :: factory是 - 如果不清楚的话,那很抱歉)。指向测试引导解决了问题! – Emilie 2012-03-25 20:17:41