Symfony 似乎在运行单元测试时打开数据库连接时出现问题。我在 config/databases.yml 中指定了我的测试环境:
全部: 教义: 类:sfDoctrineDatabase 参数: dsn: 'mysql:host=localhost;dbname=ms' 用户名:ms 密码:xxx 测试: 教义: 类:sfDoctrineDatabase 参数: dsn: 'mysql:host=localhost;dbname=ms' 用户名:ms 密码:xxx ...
(test/unit/MSTest.php) 的测试文件如下所示:
require_once dirname(__FILE__).'/../bootstrap/unit.php'; $a = 新文章(); $a->setHeadline("文章标题"); $a->保存();
当我尝试使用“symfony test:unit MS”运行测试时,它只是返回“没有打开的连接”并退出。单独运行测试 (php test/unit/MSTest.php) 会返回完整的堆栈跟踪:
C:\phpworkspace\ms>php 测试/单元/MSTest.php 致命错误:在 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php:662 中未捕获异常 'Doctrine_Connection_Exception' 并带有消息 'There is no open connection' 堆栈跟踪: #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 {主要} 在第 662 行的 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php 中抛出
我用谷歌搜索了一下,似乎所有提示都直接指向 database.yml 测试:环境(见上图)已经到位。我在命令行上测试了用户名/密码/数据库名称,用户确实有效。这里描述的另一个解决方案是替换 unit.php 中的行
$configuration = ProjectConfiguration::hasActive() ? 项目配置::getActive() : 新的 ProjectConfiguration(realpath($_test_dir.'/..'));
到
$configuration = ProjectConfiguration::getApplicationConfiguration( '前端','测试',真 );
但就我而言,这似乎也无济于事。它在两种情况下都加载配置,但返回不同的对象 (print_r($configuration)) 作为结果 - ProjectConfiguration 在默认情况下和 frontendConfiguration 在新替换行的情况下;最后一个似乎具有所有正确的配置指令(来自 app.xml 文件的 app_xxx)。请建议 - 我还能在哪里看?我一直在清除我的缓存(symfony cc),创建单独的数据库进行测试,重新加载模型/夹具,到目前为止没有任何效果。这些模型是有效的,并且已经在各地的应用程序中使用,所以它必须与测试环境有关。
我正在运行 PHP 5.3.1、mysql 5.1.41 和 symfony 1.4 (XAMPP)。
谢谢。