我试图弄清楚如何使用Codeception连接到多个数据库。我甚至尝试直接实例化一个新的PDO实例,但是codept run
命令只是过早地结束而没有错误消息。
我可以使用Db模块很好地连接到一个数据库,以使用$I->seeInDatabase()
之类的功能,但我试图连接到两个。尝试使用$this->getModule('Db')->_reconfigure()
在运行时重新配置Db模块也只是停止测试而没有消息。
有什么想法吗?
答案 0 :(得分:2)
我认为这就是你想要的:https://github.com/Codeception/Codeception/issues/1634 ...但是,它还没有实现 - 也许你可以解决这个问题?
答案 1 :(得分:1)
我能够通过以下方式实现这一目标:
Suite配置文件:
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'
PHP测试代码:
//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 ] );
结果:
I am connected to database "DATABASE2_USE_THIS_NAME_IN_YOUR_CODE"
I see num records 1,"users"
I see in database "users",{"email":"john@example.com"}
I am connected to database "default"
I see num records 1,"sessions"
I see in database "sessions",{"uniqueness":"635c798c-05cd-4d9d-b79a-9643...}
答案 2 :(得分:0)
嘛!如果你不使用模拟数据库连接,那么你可以在使用代码时在symfony中实现这一点。
使用
获取Doctrine服务$doctrine = $I->grabService('Doctrine').
现在抓住您在doctrine ORM部分中提到的数据库连接。
$connection = $doctrine->getConnection('DB_Name_as_in_ORM')
我认为这就是你想要的,也许!