pmgdev/database-replicator

此包已被弃用且不再维护。未建议替代包。

为每个测试克隆数据库。

v0.1.2 2019-09-06 07:40 UTC

This package is auto-updated.

Last update: 2021-11-21 16:31:47 UTC


README

Build Status Scrutinizer Code Quality Downloads this Month Latest stable Coverage Status

这是一个简单的库,为每个测试准备数据库。

支持的数据库

  • 目前只支持 postgres
  • 以下是实现其他数据库的接口 Command
  • 若要添加新的数据库,请创建pull request

扩展

通过 composer 安装

composer require --dev pmgdev/database-replicator

如何使用我们的数据库布局

每个人都可以有不同的数据库布局。以下是准备好的接口 DatabaseConnection,这是我们测试中使用的。或者我们可以扩展准备好的抽象类 Database,在该类中创建我们数据库布局的实例(如PDO、Doctrine、我们的实现等)。

我们需要一个具有创建和删除数据库权限的连接,以及一个用于标准使用的次要连接。

  1. 我们实现了 DatabaseConnection,或者我们可以使用准备好的抽象类 Database

    • 我们在这个测试中使用了这个新类
    • 我们需要在 Database\Replicator 上创建依赖
    • create() 方法必须创建您的数据库连接,让我们保存 Config 以导入文件
    • drop() 断开连接并删除数据库
  2. 以下是准备好的 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