Test::DB

Temporary Testing Databases

Temporary Databases for Testing

method: clone method: create method: mssql method: mysql method: postgres method: sqlite

use Test::DB;

my $tdb = Test::DB->new;

# my $tdbo = $tdb->create(database => 'sqlite');

# my $dbh = $tdbo->dbh;

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

+=head2 process

on create, clone

+=over 4

+=item #1

Establish a connection to the DB using some "initial" database.

my $tdbo = $tdb->postgres(initial => 'template0');

+=item #2

Using the established connection, create the test/temporary database.

$tdbo->create;

+=item #3

Establish a connection to the newly created test/temporary database.

$tdbo->create->dbh;

+=back

on destroy

+=over 4

+=item #1

Establish a connection to the DB using the "initial" database.

# using the created test/temporary database object

+=item #2

Using the established connection, drop the test/temporary database.

$tdbo->destroy;

+=back

+=head2 usages

using DBI

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $dbh = $tdb->sqlite(%options)->dbh;

+=back

using DBIx::Class

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $tdbo = $tdb->postgres(%options)->create;
my $schema = DBIx::Class::Schema->connect(
  dsn => $tdbo->dsn,
  username => $tdbo->username,
  password => $tdbo->password,
);

+=back

using Mojo::mysql

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $tdbo = $tdb->mysql(%options)->create;
my $mysql = Mojo::mysql->new($tdbo->uri);

+=back

using Mojo::Pg

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $tdbo = $tdb->postgres(%options)->create;
my $postgres = Mojo::Pg->new($tdbo->uri);

+=back

using Mojo::Pg (with cloning)

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $tdbo = $tdb->postgres(%options)->clone('template0');
my $postgres = Mojo::Pg->new($tdbo->uri);

+=back

using Mojo::SQLite

+=over 4

+=item #1

my $tdb = Test::DB->new;
my $tdbo = $tdb->sqlite(%options)->create;
my $sqlite = Mojo::SQLite->new($tdbo->uri);

+=back

The clone method generates a database based on the type and database template specified and returns a driver object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

clone(Str :$database, Str %options) : Maybe[Object]

=example-1 clone

# given: synopsis

$ENV{TESTDB_DATABASE} = 'postgres';

$tdb->clone(template => 'template0');

=example-2 clone

# given: synopsis

$ENV{TESTDB_DATABASE} = 'postgres';
$ENV{TESTDB_TEMPLATE} = 'template0';

$tdb->clone;

=example-3 clone

# given: synopsis

$ENV{TESTDB_TEMPLATE} = 'template0';

$tdb->clone(database => 'postgres');

The create method generates a database based on the type specified and returns a driver object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

create(Str :$database, Str %options) : Maybe[Object]

=example-1 create

# given: synopsis

$tdb->create;

=example-2 create

# given: synopsis

$ENV{TESTDB_DATABASE} = 'sqlite';

$tdb->create;

=example-3 create

# given: synopsis

$tdb->create(database => 'sqlite');

The mssql method builds and returns a Test::DB::Mssql object.

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Mssql"]]

=example-1 mssql

# given: synopsis

$tdb->mssql;

The mysql method builds and returns a Test::DB::Mysql object.

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Mysql"]]

=example-1 mysql

# given: synopsis

$tdb->mysql;

The postgres method builds and returns a Test::DB::Postgres object.

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Postgres"]]

=example-1 postgres

# given: synopsis

$tdb->postgres;

The sqlite method builds and returns a Test::DB::Sqlite object.

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Sqlite"]]

=example-1 sqlite

# given: synopsis

$tdb->sqlite;

18 POD Errors

The following errors were encountered while parsing the POD:

Around line 13:

Unknown directive: =name

Around line 21:

Unknown directive: =tagline

Around line 29:

Unknown directive: =abstract

Around line 37:

Unknown directive: =includes

Around line 50:

Unknown directive: =synopsis

Around line 62:

Unknown directive: =description

Around line 194:

Unknown directive: =method

Around line 205:

Unknown directive: =signature

Around line 236:

Unknown directive: =method

Around line 246:

Unknown directive: =signature

Around line 272:

Unknown directive: =method

Around line 276:

Unknown directive: =signature

Around line 288:

Unknown directive: =method

Around line 292:

Unknown directive: =signature

Around line 304:

Unknown directive: =method

Around line 308:

Unknown directive: =signature

Around line 320:

Unknown directive: =method

Around line 324:

Unknown directive: =signature