模型後,我開始寫控制器的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'
);
你是怎麼修好的?我也有同樣的問題。 – Nat
對不起,我發現目前還沒有修復或幫助。這真是一團糟,也是我沒有完整代碼覆蓋的原因之一。 當我爲控制器編寫測試時,我遇到了所有控制器的問題。真的很煩人。 也許我們可以一起找到解決方案? –
我在我的情況下,問題是與蛋糕「權限」模式。 我用xdebug一步一步地調試了我的代碼,並找到了適合我的特殊情況的解決方案。對於ACL,我必須在我的setUp()中設置一個配置:'Configure :: write('Acl.database','test');'。但我認爲這不會對你的問題有所幫助。 – Nat