1

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)。

谢谢。

4

1 回答 1

6

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

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
new sfDatabaseManager($configuration);
于 2010-07-29T09:19:00.480 回答