Настройка ZF, ZFDoctrine и PHPUnit - PullRequest
       37

Настройка ZF, ZFDoctrine и PHPUnit

2 голосов
/ 19 августа 2010

Кто-нибудь здесь использует Zend Framework, ZFDoctrine и PHPUnit вместе?

Как перестраивать базу данных при каждом запуске теста? Как разделить локальную / производственную / тестовую среду?

Не могли бы вы поделиться настройкой юнит-тестирования?

Я пытался что-то подобное:

// /tests/bootstrap.php
// ... setup paths and constants here
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap('doctrine');
$provider = new ZFDoctrine_Tool_DoctrineProvider;
$provider->generateModelsFromYaml();
//$provider->buildProject(true);

Но это заканчивается:

Notice: Constant APPLICATION_PATH already defined in /home/user/www/library/ZendFramework/1.10.7/library/Zend/Tool/Project/Context/Zf/BootstrapFile.php on line 106

Fatal error: Call to a member function getResponse() on a non-object in /home/user/www/library/zf-doctrine/library/ZFDoctrine/Tool/DoctrineProvider.php on line 271

Модели не генерируются.

Я получаю похожие ошибки:

$provider->createDatabase();

Но в этом случае база данных создается.
Другие команды провайдера не работают.

<ч />

Решение:

$provider = new ZFDoctrine_Tool_DoctrineProvider;
$registry = new Zend_Tool_Framework_Registry;
$provider->setRegistry($registry);
@$provider->buildProject(true);

Если кто-нибудь знает лучший подход, поправьте меня.

1 Ответ

0 голосов
/ 22 января 2011

Я не использовал ZFDoctrine, а просто Doctrine 1.2. Я не знаю, лучше ли мое решение, но я решил опубликовать, если кто-нибудь заинтересовался, вот файл bootstrap.php в моей папке с тестами:

<?php

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));

// Define application environment
/**
 * In the application.ini:
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
doctrine.dsn = "mysql://my_user:passwd@localhost/my_phpunit_test_db"
 */
define('APPLICATION_ENV', 'testing');

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path()
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/../configs/application.ini'
);

$application->getBootstrap()->bootstrap();

// Can run out if too small
ini_set('memory_limit', '512M');

// Get the doctrine settings
$config = $application->getOption('doctrine');
$cli = new Doctrine_Cli($config);
$cli->run(array("doctrine", "build-all-reload","force"));

Ключевым моментом здесь является последняя строка, которая перестраивает все базы данных, создавая чистую среду для каждого тестирования.

...