2012-08-16 14 views
0

我已經完成了功能測試,現在我想運行它們。但是,每次運行它們時,我都會找到sfTestFunctional類。Symfony 1.4 not loading sfTestFunctional失敗,找不到類

據我可以告訴functional.php bootstrap不自動從框架的類自動加載。任何理由爲什麼這可能是?

這是我的功能引導

// guess current application 
if (!isset($app)) 
{ 
    $traces = debug_backtrace(); 
    $caller = $traces[0]; 

    $dirPieces = explode(DIRECTORY_SEPARATOR, dirname($caller['file'])); 
    $app = array_pop($dirPieces); 
} 

require_once dirname(__FILE__).'/../../config/ProjectConfiguration.class.php'; 
$configuration = ProjectConfiguration::getApplicationConfiguration($app, 'test', isset($debug) ? $debug : true); 

sfContext::createInstance($configuration); 


// remove all cache 
sfToolkit::clearDirectory(sfConfig::get('sf_app_cache_dir')); 

$doctrine = new sfDoctrineDropDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter()); 
$doctrine->run(array(), array("--no-confirmation","--env=test")); 

$doctrine = new sfDoctrineBuildDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter()); 
$doctrine->run(array(), array("--env=test")); 

$doctrine = new sfDoctrineInsertSqlTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter()); 
$doctrine->run(array(), array("--env=test")); 

這是在我的功能測試

include(dirname(__FILE__).'/../../bootstrap/functional.php'); 

$browser = sfTestFunctional(new sfBrowser()); 
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures/fixtures_initial.yml'); 
+0

'require_once'到'ProjectConfiguration'是否正確? '$ app'裏面是什麼? – j0k 2012-08-16 14:47:27

+0

我認爲$ app是測試:functional [application] - 那是functional.php bootstrap中已經存在的東西。 require_once也在bootstrap中。 require_once命令匹配工作的unit.php bootstrap。 – 2012-08-16 15:48:41

+0

你是對的,這是默認的'test/bootstrap/functional.php' :) – j0k 2012-08-16 15:57:56

回答

0

我發現這個問題:

$browser = sfTestFunctional(new sfBrowser()); 

你應該寫:

$browser = new sfTestFunctional(new sfBrowser()); 
+0

嗯......我很困惑自己很確定這是正確的,因爲它在新的sfTestFunctional()函數測試中失敗了。無論如何,現在它正在爲我編寫的某個過濾器生成另一個類未找到的錯誤。似乎是與非框架代碼和類有關的東西。 – 2012-08-16 23:01:20

1

好的。所以在將我的頭撞在牆上之後,我找到了一個解決方案。

由於某些原因,在測試環境中,自定義過濾器不自動加載。解決方案是將所有自定義過濾器的require_once添加到ProjectConfiguration文件中。這裏是我做的例子:

if(sfConfig::get('sf_environment') == 'test' && sfConfig::get('sf_app') == 'frontend') 
{ 
    require_once sfConfig::get('sf_app_lib_dir').'/myFilter.class.php'; 
    require_once sfConfig::get('sf_app_lib_dir').'/myotherFilter.class.php'; 
    require_once sfConfig::get('sf_app_lib_dir').'/lovefiltersFilter.php'; 
    require_once sfConfig::get('sf_app_lib_dir').'/eventsManagement.class.php'; 

    require_once sfConfig::get('sf_test_dir').'/ProdPadTestFunctional.class.php'; 
} 

我還必須添加我的自定義testFuntional類。這可以使用autoload.yml文件更加優雅地完成。

+0

這可能與此[ticket](http://trac.symfony-project.org/ticket/4524)有關。 – j0k 2012-08-21 12:58:16

+0

是的,我認爲這是。驚訝它沒有在1.4.18中修復,我想這不是優先事項。 – 2012-08-22 13:18:11

+0

現在sf 1.4.x沒什麼優先... – j0k 2012-08-22 13:19:50