[英]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 。
我之前沒有遇到過這個特定的問題,但是我很好奇你是否嘗試過設置你想要的特定連接。 所以你設置alias
和useTable
方式相同:
$this->User->useDbConfig = 'test';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.