在运行单元测试时,Symfony似乎在打开数据库连接时遇到问题。我在config / databases.yml中指定了我的测试环境:
all: doctrine: class: sfDoctrineDatabase param: dsn: 'mysql:host=localhost;dbname=ms' username: ms password: xxx test: doctrine: class: sfDoctrineDatabase param: dsn: 'mysql:host=localhost;dbname=ms' username: ms password: xxx ...
,(test / unit / MSTest.php)的测试文件如下所示:
require_once dirname(__FILE__).'/../bootstrap/unit.php'; $a = new Article(); $a->setHeadline("Article Headline"); $a->save();
当我尝试使用“symfony test:unit MS”运行测试时,它只返回“没有打开连接”并退出。单独运行测试(php test / unit / MSTest.php)将返回完整的堆栈跟踪:
C:\phpworkspace\ms>php test/unit/MSTest.php Fatal error: Uncaught exception 'Doctrine_Connection_Exception' with message 'There is no open connection' in C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php:662 Stack trace: #0 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php(557): Doctrine_Manager->getCurrentConnection() #1 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Core.php(1095): Doctrine_Manager->getConnectionForComponent('Article') #2 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php(219): Doctrine_Core::getTable('Article') #3 C:\phpworkspace\ms\test\unit\UniversalDemoTest.php(15) : Doctrine_Record->__construct() #4 {main} thrown in C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php on line 662
我用谷歌搜索它,似乎所有提示都直接指向database.yml测试:环境(看上面)已经到位。我在命令行上测试了用户名/密码/ db名称,并且用户有效。 other solution described here是替换
中unit.php中的行$configuration = ProjectConfiguration::hasActive() ? ProjectConfiguration::getActive() : new ProjectConfiguration(realpath($_test_dir.'/..'));
到
$configuration = ProjectConfiguration::getApplicationConfiguration( 'frontend', 'test', true );
但在我的情况下似乎也没有帮助。它加载在这两种情况下的配置,但返回不同的对象(的print_r($配置)),作为一个结果 - 在默认和frontendConfiguration在新更换的线路情况的情况下ProjectConfiguration;最后一个似乎有所有正确的配置指令(来自app.xml文件的app_xxx)。请指教 - 我还能在哪儿看?我一直在清理我的缓存(symfony cc),创建单独的数据库用于测试,重新加载模型/固定装置,到目前为止没有任何作用。这些模型是有效的,并且已经在应用程序中使用,所以它必须与测试环境有关。
我正在使用symfony 1.4(XAMPP)运行PHP 5.3.1,mysql 5.1.41。
感谢。
答案 0 :(得分:6)
您需要初始化数据库管理器以使用doctrine的模型类:
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
new sfDatabaseManager($configuration);