首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF、ZFDoctrine和PHPUnit设置

ZF、ZFDoctrine和PHPUnit设置
EN

Stack Overflow用户
提问于 2010-08-19 20:11:13
回答 1查看 483关注 0票数 2

这里有人同时使用Zend Framework、ZFDoctrine和PHPUnit吗?

如何在每次测试运行时重建数据库?如何分离本地/生产/测试环境?

你会分享你的单元测试设置吗?

我一直在尝试这样的事情:

代码语言:javascript
复制
// /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);

但这以以下方式结束:

代码语言:javascript
复制
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

不会生成模型。

我运行时遇到类似的错误:

代码语言:javascript
复制
$provider->createDatabase();

但在本例中,创建了数据库。

其他提供程序命令不起作用。

解决方案:

代码语言:javascript
复制
$provider = new ZFDoctrine_Tool_DoctrineProvider;
$registry = new Zend_Tool_Framework_Registry;
$provider->setRegistry($registry);
@$provider->buildProject(true);

如果有人知道更好的方法,请纠正我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-23 01:30:06

我没有使用过ZFDoctrine,只是使用了简单的Doctrin1.2。我不知道我的解决方案是否更好,但我想如果any1感兴趣,我会发布,下面是我的测试文件夹中的bootstrap.php:

代码语言:javascript
复制
<?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"));

这里的关键实际上是重建所有数据库的最后一行,为每次测试创建一个干净的环境。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3521603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档