在模型之后,我开始为控制器编写单元测试。我使用CakePhp 2.5.1
<?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的数据集。
知道为什么吗?据我所知,我有像书中所说的设置。
Calamity Jane
编辑:我为我的Fixture尝试了另一个设置,但它仍然提取错误的数据进行测试:
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 :(得分:-1)
我强烈建议:
为所有TestControllers创建父类,并在setUp()
方法put:
ConnectionManager::alias('test', 'default');