Cakephp控制器测试使用错误的数据库

时间:2014-06-13 12:58:24

标签: unit-testing cakephp

在模型之后,我开始为控制器编写单元测试。我使用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'
    );

1 个答案:

答案 0 :(得分:-1)

我强烈建议: 为所有TestControllers创建父类,并在setUp()方法put:

中创建

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