2010-06-22 146 views
0

我在另一個forum問了同樣的問題,但我還沒有任何運氣。所以請允許我在這裏提出同樣的問題。Zend_Test測試控制器

我想設置Zend_Test來測試我的控制器代碼(我使用PHP,Zend Framework)。一切似乎都是正確的,根據official documentation,但我不斷收到錯誤。

有關問題和設置的詳細說明,請參考forum post這裏。任何人都可以給我一個線索,我的設置有什麼問題?

謝謝!問候,Andree。

回答

1

我已經使用setFallbackAutoloader(true),這是你以前的時候這個問題,但我從來沒有能夠追查根源。如果你谷歌錯誤,你會發現幾個ZF錯誤報告提到它。

您是否確認在應用程序中還使用了setFallbackAutoloader(true)?如果沒有,那麼你可以從TestHelper.php中刪除該行。如果你是,然後嘗試添加:

$autoLoader->suppressNotFoundWarnings(true); 

就在它之後,這通常會解決我的問題(但可能會導致一些其他問題)。

+0

是的,我沒有在我的應用程序中使用備用自動載入器,但我在TestHelper.php中設置了一個。在我手動刪除行和註冊名稱空間之後,測試運行正常。謝謝蒂姆! – Andree 2010-06-24 12:29:14

0

我已經在幾個會議上就這個主題進行了討論,甚至還有一個關於Zend網站的網絡研討會(見下面的鏈接)。

當我看着你的設置腳本時,你會遇到很多混亂,一旦你添加了更多的功能到你的應用程序就很難維護它。

我TestHelper類僅包含以下內容:

<?php 
/* 
* Example test helper script taken from the blog article of Matthew Weier 
* O'Phinney on September 11, 2008 
* 
* {@link http://weierophinney.net/matthew/archives/190-Setting-up-your-Zend_Test-test-suites.html} 
*/ 

/* 
* Start output buffering 
*/ 
//ob_start(); 

/* 
* Set error reporting to the level to which code must comply. 
*/ 
error_reporting(E_ALL | E_STRICT); 

/* 
* Set default timezone 
*/ 
date_default_timezone_set('Europe/Brussels'); 

/* 
* Testing environment 
*/ 
if (!defined('APPLICATION_ENV')) 
    define('APPLICATION_ENV', 'testing'); 

/* 
* Determine the root, library, tests, and models directories 
*/ 
$root  = realpath(dirname(__FILE__) . '/../'); 
$library  = $root . '/library'; 
$tests  = $root . '/tests'; 
$models  = $root . '/application/models'; 
$controllers = $root . '/application/controllers'; 

/* 
* Set up application and test path constant for easy access helper classes 
*/ 
if (!defined('APPLICATION_PATH')) 
    define('APPLICATION_PATH', $root . '/application'); 
define('TEST_PATH', $tests); 

/* 
* Prepend the library/, tests/, and models/ directories to the 
* include_path. This allows the tests to run out of the box. 
*/ 
$localFrameworkPaths = array (
    '/usr/local/zend/share/ZendFramework/library', 
    '/opt/ZendFramework', 
); 
$include_path = get_include_path(); 
foreach ($localFrameworkPaths as $zfPath) { 
    $include_path = str_replace($zfPath . PATH_SEPARATOR, '', $include_path); 
} 
$path = array(
    APPLICATION_PATH, 
    $models, 
    $library, 
    $tests, 
    $include_path, 
); 
set_include_path(implode(PATH_SEPARATOR, $path)); 

/** 
* Register autoloader 
*/ 
require_once 'Zend/Loader.php'; 
Zend_Loader::registerAutoload(); 

/** 
* Store application root in registry 
*/ 
Zend_Registry::set('testRoot', $root); 
Zend_Registry::set('testBootstrap', $root . '/application/bootstrap.php'); 

/** 
* Say to the sessions we use unit testing here 
*/ 
Zend_Session::$_unitTestEnabled = true; 

/* 
* Unset global variables that are no longer needed. 
*/ 
unset($root, $library, $models, $controllers, $tests, $path); 

這類似於提供在自己的博客原來的設置MWOP(見類頂部的鏈接)。

就是這樣,無需擔心手動添加模塊或跟蹤應用程序體系結構中的更改,因爲這將使用您的應用程序自己的引導程序。

欲瞭解更多信息,也請查看以下鏈接:

讓我知道它是否也爲你的案件做了工作。