模型后,我开始写控制器的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