您可以使用测试数据库副本而不是使用CakePHP3的Fixtures进行测试吗?

时间:2018-01-18 21:50:20

标签: cakephp cakephp-3.0

我使用CakePHP3并将生产数据库(my_app)复制到测试数据库(test_my_app)中。 app.php中列出了测试连接的详细信息,debug设置为true。

我是否需要使用灯具或我的控制器是否会测试拾取测试数据库?在我发布到控制器(REST API)的那一刻,它似乎适用于生产数据库,而不是测试数据库。该应用程序正在http://localhost/my_app/上运行,这是控制器测试中使用的URL。

我在控制台上运行测试:

$ vendor/bin/phpunit tests/TestCase/Controller/ArticlesControllerTest

这仍处于开发阶段,因此数据库很小。

这是代码:

public function testAdd()
{
    $users = TableRegistry::get('Users');
    $query = $users->find('all');
    $before = $query->count();
    $params = [
        'username' => 'foo',
        'email' => 'foobar@example.com ',
        'password' => 'password',
        'fullname' => 'Elbart Bart',
        'status' => 'active'
    ];
    $this->configRequest([
        'headers' => [
            'Authorization' => 'Bearer ' . $this->token
        ]
    ]);
    $this->post('users/add', $params);
    $query2 = $users->find('all');
    $after= $query2->count();
            debug($before);
    $this->assertEquals($after,$before+1);
}

1 个答案:

答案 0 :(得分:1)

是的,您可以使用测试数据库进行测试,根本不需要灯具。我将my_app数据库复制到test_my_app中,并且CakePHP测试约定能够获取它。

另外,请确保不使用绝对/完整URL,然后使用生产数据库 -

// so DON'T do this 
$this->post('http://localhost/my_app/users/add', $data). 

//Instead do:
$this->post('/users/add', $data);