通过 Codeception 验收测试连接到多个数据库

Gab*_*iel 3 php unit-testing acceptance-testing yii2 codeception

我正在尝试弄清楚如何使用 Codeception 连接到多个数据库。我什至尝试直接实例化一个新的 PDO 实例,但codept run命令只是提前结束且没有错误消息。

我可以使用 Db 模块很好地连接到一个数据库,以使用诸如此类的功能,$I->seeInDatabase()但在尝试连接到两个数据库时却陷入困境。尝试在运行时重新配置 Db 模块$this->getModule('Db')->_reconfigure()也只是停止测试而不显示任何消息。

有任何想法吗?

And*_*sik 5

我通过以下方式实现了这一目标:

套件配置文件:

actor: API_Tester
lint: true
colors: true
modules:
    enabled:
        - \Helper\Api
        - Asserts
        - REST:
            url: http://localhost
            depends: PhpBrowser
            part: Json
            headers:
              Accept: application/json
              Content-Type: application/json
        - Db:
            dsn: 'mysql:host=localhost;dbname=DATABASE1'
            user: 'DBUSER'
            password: 'DBPASSWORD'
            dump: 'tests/populate-DATABASE1.sql'
            populate: true
            cleanup: false
            reconnect: true
            populator: 'mysql -u $user -p$password -h $host $dbname < $dump'
            databases:
              DATABASE2_USE_THIS_NAME_IN_YOUR_CODE:
                dsn: 'mysql:host=localhost;dbname=DATABASE2'
                user: 'DBUSER'
                password: 'DBPASSWORD'
                dump: 'tests/populate-DATABASE2.sql'
                populate: true
                cleanup: false
                reconnect: true
                populator: 'mysql -u $user -p$password -h $host $dbname < $dump'
Run Code Online (Sandbox Code Playgroud)

PHP测试代码:

actor: API_Tester
lint: true
colors: true
modules:
    enabled:
        - \Helper\Api
        - Asserts
        - REST:
            url: http://localhost
            depends: PhpBrowser
            part: Json
            headers:
              Accept: application/json
              Content-Type: application/json
        - Db:
            dsn: 'mysql:host=localhost;dbname=DATABASE1'
            user: 'DBUSER'
            password: 'DBPASSWORD'
            dump: 'tests/populate-DATABASE1.sql'
            populate: true
            cleanup: false
            reconnect: true
            populator: 'mysql -u $user -p$password -h $host $dbname < $dump'
            databases:
              DATABASE2_USE_THIS_NAME_IN_YOUR_CODE:
                dsn: 'mysql:host=localhost;dbname=DATABASE2'
                user: 'DBUSER'
                password: 'DBPASSWORD'
                dump: 'tests/populate-DATABASE2.sql'
                populate: true
                cleanup: false
                reconnect: true
                populator: 'mysql -u $user -p$password -h $host $dbname < $dump'
Run Code Online (Sandbox Code Playgroud)

结果:

        //Connect to the second database
        $I -> amConnectedToDatabase ( 'DATABASE2_USE_THIS_NAME_IN_YOUR_CODE' );
        $I -> seeNumRecords ( 1, 'users' );
        $I -> seeInDatabase ( 'users', [ 'email' => 'john@example.com' ] );
        //Connect back to the default database
        $I -> amConnectedToDatabase ( Codeception\Module\Db::DEFAULT_DATABASE );
        $I -> seeNumRecords ( 1, 'sessions' );
        $I -> seeInDatabase ( 'sessions', [ 'uniqueness' => $this -> uuid ] );
Run Code Online (Sandbox Code Playgroud)