2014-06-13 59 views
0

模型後,我開始寫控制器的unittests。我使用CakePHP 2.5.1CakePHP控制器測試使用錯誤的數據庫

<?php 
App::uses('MediaController', 'Controller'); 

/** 
* MediaController Test Case 
* 
*/ 
class MediaControllerTest extends ControllerTestCase 
{ 

    /** 
    * Fixtures 
    * 
    * @var array 
    */ 
    public $fixtures = array(
     'app.media',.... 
    ); 


    /** 
    * testView method 
    * 
    * @return void 
    */ 
    public function testView() 
    { 
     $result = $this->testAction('/media/view/2', array('return' => 'vars')); 
     debug($result); 
     $this->assertInternalType('array', $result); 
     $this->assertArrayHasKey('media', $result); 
     $this->assertArrayHasKey('Media', $result['media']); 
    } 

我得到的 NotFoundException 無效的媒體 測試用例:MediaControllerTest(testView)

所以我檢查,並發現該試驗沒有使用我的testdatabase喜歡的機型做,但我的默認數據庫,其中不包含ID爲2的數據集。

任何想法爲什麼?據我所知,我有本書所建議的設置。

災難珍妮

編輯:我嘗試另一個設置爲我的燈具,但它仍然獲取錯誤的數據來進行測試:

class MediaFixture extends CakeTestFixture { 
    public $import = array('table' => 'media', 'connection' => 'test_seed', 'records' => true); 
} 

這是我在database.php中設置:

$this->default = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host'  => 'localhost', 
     'login'  => 'mylogin', 
     'password' => 'mysupersecretpw', 
     'database' => 'gkm_wap_dev', 
     'prefix'  => 'sang_', 
     'encoding' => 'utf8' 
    ); 

    $this->test = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host'  => 'localhost', 
     'login'  => 'mylogin', 
     'password' => 'mysupersecretpw', 
     'database' => 'gkm_wap_test', 
     'prefix'  => 'sang_', 
     'encoding' => 'utf8' 
    ); 
    $this->test_seed = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host'  => 'localhost', 
     'login'  => 'mylogin', 
     'password' => 'mysupersecretpw', 
     'database' => 'gkm_wap_testseed', 
     'prefix'  => 'sang_', 
     'encoding' => 'utf8' 
    ); 
+0

你是怎麼修好的?我也有同樣的問題。 – Nat

+0

對不起,我發現目前還沒有修復或幫助。這真是一團糟,也是我沒有完整代碼覆蓋的原因之一。 當我爲控制器編寫測試時,我遇到了所有控制器的問題。真的很煩人。 也許我們可以一起找到解決方案? –

+0

我在我的情況下,問題是與蛋糕「權限」模式。 我用xdebug一步一步地調試了我的代碼,並找到了適合我的特殊情況的解決方案。對於ACL,我必須在我的setUp()中設置一個配置:'Configure :: write('Acl.database','test');'。但我認爲這不會對你的問題有所幫助。 – Nat

回答

0

我強烈建議: 爲您所有的TestControllers和setUp()方法創建父類:

ConnectionManager::alias('test', 'default');

+0

它是做什麼的?僞造默認連接實際上是測試數據庫? –