Php 使用Codeception验收测试连接到多个数据库

Php 使用Codeception验收测试连接到多个数据库,php,unit-testing,yii2,codeception,acceptance-testing,Php,Unit Testing,Yii2,Codeception,Acceptance Testing,我正试图弄清楚如何使用Codeception连接到多个数据库。我甚至尝试过直接实例化一个新的PDO实例,但是codept run命令只是过早地结束,没有错误消息 我可以使用Db模块使用函数(如$I->seeInDatabase())很好地连接到一个数据库,但我无法连接到两个数据库。尝试在运行时使用$this->getModule('Db')->\u reconfigure()重新配置Db模块也会停止测试,而不显示任何消息 有什么想法吗?我想这就是你想要的: ... 然而,它还没有实现-也许你可以

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

我可以使用Db模块使用函数(如
$I->seeInDatabase()
)很好地连接到一个数据库,但我无法连接到两个数据库。尝试在运行时使用
$this->getModule('Db')->\u reconfigure()
重新配置Db模块也会停止测试,而不显示任何消息


有什么想法吗?

我想这就是你想要的:
... 然而,它还没有实现-也许你可以推动这个问题?

好吧!如果您不使用模拟数据库连接,您可以执行我在symfony中使用codeception实现过的操作

  • 抓取条令服务使用

    $doctrine = $I->grabService('Doctrine').
    
  • 现在获取您在ORM部分中提到的数据库连接

    $connection = $doctrine->getConnection('DB_Name_as_in_ORM')
    
  • 现在,您已连接到所需的数据库,现在可以使用“dbal连接方法”对该数据库中的表执行查询

  • 我想这就是你想要的,也许

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

    套件配置文件:

    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'
    
    结果:

    我已连接到数据库“DATABASE2\u在您的代码中使用此\u名称”
    我看到num记录1,“用户”
    我在数据库中看到“用户”{“电子邮件”:john@example.com"}
    我已连接到数据库“默认”
    我看到num记录1,“会话”
    我在数据库“会话”中看到,{“唯一性”:“635c798c-05cd-4d9d-b79a-9643…”
    
    您需要同时使用这两个连接吗?如果不需要,您可以使用不同的数据库连接参数配置不同的环境。不,我的意思是我甚至可以关闭一个连接并将其更改为另一个连接,但我希望在同一测试中使用这两个连接,如果这是您的要求的话?欢迎使用Stackoverflow!尝试避免只提供链接的答案。应该有足够的信息自行提供答案,并且可以提供更多信息的链接。此外,如果你的链接断开,你的答案将变得毫无用处。我们希望你留下来帮助改进我们的社区!嗨,丹尼斯,谢谢你的建议!我尝试改进我的信息。我想要做的是什么比如说,这个问题有一个公开的问题,但它仍然悬而未决。如果我们有足够多的感兴趣的参与者,也许我们可以推动这个问题。即使只是一个链接也可以贡献:我不认为,在官方网站上链接到一个功能请求不是一个好的答案。即使它只是一个liink。我对这个答案投了更高的票,以表明这一点如何引用官方文档中当前未提及的默认配置数据库(
    \Codeception\Module\Db::default_database
    )。