2012-03-25 77 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