簡體   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