pmgdev / database-replicator
此包已被弃用且不再维护。未建议替代包。
为每个测试克隆数据库。
v0.1.2
2019-09-06 07:40 UTC
Requires
- php: >=7.1
- nette/utils: ^2.4 || ^3.0
Requires (Dev)
- nette/tester: ^2.0
- phpstan/phpstan: ^0.11.1
- tracy/tracy: ^2.0
Suggests
- ext-pgsql: Install extension, if you want test on PostgreSQL.
This package is auto-updated.
Last update: 2021-11-21 16:31:47 UTC
README
这是一个简单的库,为每个测试准备数据库。
支持的数据库
- 目前只支持 postgres
- 以下是实现其他数据库的接口 Command
- 若要添加新的数据库,请创建pull request
扩展
通过 composer 安装
composer require --dev pmgdev/database-replicator
如何使用我们的数据库布局
每个人都可以有不同的数据库布局。以下是准备好的接口 DatabaseConnection,这是我们测试中使用的。或者我们可以扩展准备好的抽象类 Database,在该类中创建我们数据库布局的实例(如PDO、Doctrine、我们的实现等)。
我们需要一个具有创建和删除数据库权限的连接,以及一个用于标准使用的次要连接。
-
我们实现了 DatabaseConnection,或者我们可以使用准备好的抽象类 Database。
- 我们在这个测试中使用了这个新类
- 我们需要在 Database\Replicator 上创建依赖
- create() 方法必须创建您的数据库连接,让我们保存 Config 以导入文件
- drop() 断开连接并删除数据库
-
以下是准备好的 Builder,我们可以扩展它并实现 createDatabase 方法,其中返回第1)点的实现
示例
ConnectionFactory
<?php use PmgDev\DatabaseReplicator; use PmgDev\DatabaseReplicator\Config; class MyConnectionDatabase extends DatabaseReplicator\Database { public function createConnection(Config $config): object { return new MyConnection($config); } public function disconnectConnection($connection): void { $connection->diconnect(); } }
Builder
<?php use PmgDev\DatabaseReplicator\Source; class MyBuilder extends PmgDev\DatabaseReplicator\Builder { protected function createDatabase(): PmgDev\DatabaseReplicator\DatabaseConnection { // these instances of Files are optional // if you have additional files for complete source of database $files = $this->createSourceFiles(); $files->addFile('data.sql'); $files->addDirectory('/sql/path'); // import dynamic data, like a current_timestamp, to every copy of original database $dynamicFiles = new Source\Files; $dynamicFiles->addFile('dynamic.data.sql'); return MyConnectionDatabase($this->createDatabaseReplicator($files, $dynamicFiles)); } }
开始使用
<?php use PmgDev\DatabaseReplicator\Config; use PmgDev\DatabaseReplicator\Database; use PmgDev\DatabaseReplicator\Database\Postgres; $adminConfig = new Config('posgres', 'posgres', '***', 'localhost', 5432); // permission for create and drop databases $command = (new Postgres\CommandFactory())->create($adminConfig); // prepared Command for postgres, this we can replace by other Command $sourceFile = '/path/to/your/structure.sql'; // here is sql how look like database $config = new Config('test', 'joe', '***', 'localhost', 5432); // standard config /** @var Database $database */ $database = (new MyBuilder($sourceFile, $config, $command))->createDatabase(); $connection = $database->create(); // startup var_dump($connection); // our connection instance of MyConnection // make test $database->drop(); // remove database