2012-08-16 16 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