2014-06-13 21 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

它是做什么的?伪造默认连接实际上是测试数据库? –