繁体   English   中英

创建PHPUnit模拟模型使用默认数据库而不是CakePHP中的test

[英]Creating a PHPUnit mocked model uses default database instead of test in CakePHP

我在CakePHP 2中测试一个模型并且模拟了这样的模型:

$this->User = $this->getMock('User', array(
  '_saveUploadedFile',
  '_removeUploadedFile',
)); 
$this->User->expects($this->any())
        ->method('_saveUploadedFile')
        ->with($data, Configure::read('App.myDirectory'), true);
        ->will($this->returnValue(true));
$this->User->expects($this->any())
        ->method('_removeUploadedFile')
        ->with($data, Configure::read('App.myDirectory'))
        ->will($this->returnValue(true));

由于使用数据库的任何操作都会引发以下错误:

"Database table mock__user_b6241a4cs for model User was not found."

我重新定义了模型信息:

$this->User->alias = 'User';
$this->User->useTable = 'users';

现在测试运行良好,但它使用database.php中的$default database.php而不是$test 可能发生什么?

使用模拟对象时,为什么测试的数据库配置会发生变化? 是否与数据库权限相关,导致模拟对象无法创建自定义表?

谢谢!

我终于通过将正确的参数传递给getMock()第三个文章中的模型构造函数来解决问题:

$this->User = $this->getMock('User',
  array('_saveUploadedFile', '_removeUploadedFile'),
  array(false, 'users', 'test')
);

应用PHPUnit文档的Stubs部分中的内容,第三个参数表明我想使用users表和test数据源。

我必须保留alias属性的重新定义:

$this->User->alias = 'User';

因为一个简单的$this->User->read(null, 1)引发一个错误,指出找不到'User.a_column'

感谢JoséLorenzo

我之前没有遇到过这个特定的问题,但是我很好奇你是否尝试过设置你想要的特定连接。 所以你设置aliasuseTable方式相同:

$this->User->useDbConfig = 'test';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM