У Symfony, похоже, проблема с открытием соединения с базой данных при запуске модульного теста. Я мой тест окр указан в конфигурации/databases.yml:Запуск теста модуля Symfony возвращает «Нет открытого соединения»
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 ...
и тестовый файл на (тест/блок/MSTest.php) выглядит следующим образом:
require_once dirname(__FILE__).'/../bootstrap/unit.php'; $a = new Article(); $a->setHeadline("Article Headline"); $a->save();
Когда я пытаюсь запустить тест с использованием «теста Symfony: единица MS» он просто возвращает «Нет открытого соединения» и выходит. Запуск теста в одиночку (тест PHP/блок/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 ($ configuration)) в результате - ProjectConfiguration в случае по умолчанию и frontendConfiguration в случае вновь замещенной строки; у последнего, похоже, есть все правильные директивы конфигурации (app_xxx из файла app.xml). Пожалуйста, совет, где еще я мог бы посмотреть? Я очищаю свой кеш (symfony cc), создавая отдельную базу данных для тестирования, перезагружая модели/приборы и пока ничего не работает. Модели действительны и уже используются в приложении повсеместно, поэтому это должно быть связано с тестовой средой.
Я запускаю PHP 5.3.1, mysql 5.1.41 с symfony 1.4 (XAMPP).
Спасибо.
Вот оно! добавление «нового sfDatabaseManager ($ configuration)»; после измененной линии сделал трюк, спасибо большое! – dsomnus