【问题标题】:How does DataSource test in cakephp 2Cakephp 2中的DataSource如何测试
【发布时间】:2017-08-25 07:51:55
【问题描述】:

我们有自定义的DataSource,想测试验证find方法执行后的数据是否等于未自定义的数据。我想,如果我们可以在测试代码中更改Datasource是可能的。我尝试了很多情况,但我无法让它工作。

 public $default = [
    'datasource' => 'CustomPostgres',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '5432',
    'login' => 'hoge',
    'password' => 'hogehoge',
    'database' => 'prod',
    'schema' => 'public',
    'prefix' => '',
    'encoding' => 'utf8'
];

public $test = [
    'datasource' => 'CustomPostgres',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '5432',
    'login' => 'hoge',
    'password' => 'hogehoge',
    'database' => 'test_prod',
    'schema' => 'public',
    'prefix' => '',
    'encoding' => 'utf8'
];

public $old = [
    'datasource' => 'Database/Postgres',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '5432',
    'login' => 'hoge',
    'password' => 'hogehoge',
    'database' => 'dev',
    'schema' => 'public',
    'prefix' => '',
    'encoding' => 'utf8'
];

public $test_old = [
    'datasource' => 'Database/Postgres',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '5432',
    'login' => 'hoge',
    'password' => 'hogehoge',
    'database' => 'test_dev',
    'schema' => 'public',
    'prefix' => '',
    'encoding' => 'utf8'
];

//try1
$this->Model->setDataSource('test_old');
//try2
ConnectionManage::create('test_old',///);
//try3
////in fixture File and ClassRegistry:Init("Model")
$useDbConfig = "old";
////inner start::up
ClassRegistry:Init("Model");
//try4 extends model
ModelForOldSetting extends Model{
  $useDbConfig = "old";
}

上面的代码不起作用,它总是发出错误说 MissingConnectionException: 数据库连接“Postgres”丢失,或者无法创建,运行测试时,但是在设置默认数据源数据库/Postgres 运行本地浏览器而不进行测试时工作正常。

所以,我真的很困惑为什么缺少数据库连接“Postgres”。任何想法都让我感激他们。

【问题讨论】:

  • 你的 Postgres 版本是多少?
  • @Kevin Kyaw 我的 postgresql 版本是 9.6.4,我找到了它的原因。很抱歉,这不是 cakephp 问题,而是由我们项目的愚蠢的应用程序结构引起的。谢谢您的建议。

标签: php cakephp


【解决方案1】:

我终于发现外部database.php文件覆盖了datasources的设置的烦人和愚蠢的烦人代码。经过适当的设置,以下代码可以正常工作。

ModelForOldSetting extends Model{
  $useDbConfig = "dev";
  $useTables = "models";
}

ClassRegistry:Init("ModelForOldSetting");
$model = $this->getMockForModel('ModelForOldSetting');

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2017-10-14
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多