0

機能テストを行ったので、それらを実行したいと思います。ただし、それらを実行するたびに、sfTestFunctional class not found が表示されます。

私が知る限り、functional.php ブートストラップはフレームワークからクラスを自動ロードしていません。これが考えられる理由は何ですか?

これは私の機能的なブートストラップです

// 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');
4

2 に答える 2

1

Ok。それで、頭を壁にぶつけた後、解決策を見つけました。

何らかの理由で、テスト環境内でカスタム フィルターが自動ロードされません。解決策は、すべてのカスタム フィルターの 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 ファイルを使用してよりエレガントに行うことができます。

于 2012-08-21T12:52:14.000 に答える
0

私は問題を見つけます:

$browser = sfTestFunctional(new sfBrowser());

あなたは書くべきです:

$browser = new sfTestFunctional(new sfBrowser());
于 2012-08-16T15:57:23.683 に答える