2011-11-24 63 views
5

使用默認的數據庫,而不是測試,我在CakePHP中2測試模型,並嘲笑這樣的模式:創建PHPUnit的嘲弄模型CakePHP的

$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數據庫而不是$test。會發生什麼?

爲什麼測試數據庫配置在使用模擬對象時發生變化?它可能與數據庫權限有關,導致模擬對象無法創建自定義表?

謝謝!

回答

2

我終於通過正確的參數傳遞給模型構造解決了這個問題在getMock()第三agument:

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

應用是什麼在Stubs section說PHPUnit文檔中,第三個參數表示我想使用users表和test數據源。

我必須保持alias屬性的重新定義,但:

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

,因爲一個簡單的$this->User->read(null, 1)引發錯誤說'User.a_column'找不到。

感謝José Lorenzo

0

我以前沒有遇到過這個特定的問題,但是我很好奇你是否嘗試過設置你想要的特定連接。所以,以同樣的方式設置aliasuseTable

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