当前位置:  开发笔记 > 编程语言 > 正文

运行symfony单元测试返回"没有打开连接"

如何解决《运行symfony单元测试返回"没有打开连接"》经验,为你挑选了1个好方法。

在运行单元测试时,Symfony似乎在打开数据库连接时遇到问题.我在config/databases.yml中指定了我的测试env:

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名称,并且用户有效.这里描述的另一个解决方案是替换unit.php中的行

$configuration = ProjectConfiguration::hasActive() ?
  ProjectConfiguration::getActive() :
  new ProjectConfiguration(realpath($_test_dir.'/..')); 

$configuration = ProjectConfiguration::getApplicationConfiguration(
  'frontend', 'test', true
); 

但在我的情况下似乎也没有帮助.它在两种情况下加载配置但返回不同的对象(print_r($ configuration)) - 默认情况下为ProjectConfiguration,新更换行时为frontendConfiguration; 最后一个似乎有所有正确的配置指令(来自app.xml文件的app_xxx).请指教 - 我还能在哪儿看?我一直在清理我的缓存(symfony cc),创建单独的数据库用于测试,重新加载模型/固定装置,到目前为止没有任何作用.这些模型是有效的,并且已经在整个应用程序中使用,因此它必须与测试环境有关.

我正在使用symfony 1.4(XAMPP)运行PHP 5.3.1,mysql 5.1.41.

谢谢.



1> Jakub Zalas..:

您需要初始化数据库管理器以使用doctrine的模型类:

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
new sfDatabaseManager($configuration);

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有