DBICx-TestDatabase
view release on metacpan or search on metacpan
lib/DBICx/TestDatabase.pm view on Meta::CPAN
package DBICx::TestDatabase;
use strict;
use warnings;
use File::Temp 'tempfile';
our $VERSION = '0.05';
# avoid contaminating the schema with the tempfile
my @TMPFILES;
sub new {
my ($class, $schema_class, $opts) = @_;
eval "require $schema_class"
or die "failed to require $schema_class: $@";
my $filename = ':memory:'; # use in-memory database
if($ENV{DBIC_KEEP_TEST}){
(undef, $filename) = tempfile;
push @TMPFILES, $filename;
}
my $schema = $schema_class->connect( "DBI:SQLite:$filename", '', '',
{ sqlite_unicode => 1 } )
or die "failed to connect to DBI:SQLite:$filename ($schema_class)";
$schema->deploy unless $opts->{nodeploy};
return $schema;
}
END {
if($ENV{DBIC_KEEP_TEST}){
print {*STDERR} "Keeping DBICx::TestDatabase databases: @TMPFILES\n";
}
}
*connect = *new;
1;
__END__
=head1 NAME
DBICx::TestDatabase - create a temporary database from a DBIx::Class::Schema
=head1 SYNOPSIS
Given a L<DBIx::Class::Schema|DBIx::Class::Schema> at C<MyApp::Schema>,
create a test database like this:
use DBICx::TestDatabase;
my $schema = DBICx::TestDatabase->new('MyApp::Schema');
Then you can use C<$schema> normally:
$schema->resultset('Blah')->create({ blah => '123' });
When your program exits, the temporary database will go away.
=head1 DESCRIPTION
This module creates a temporary SQLite database, deploys your DBIC
schema, and then connects to it. This lets you easily test your DBIC
schema. Since you have a fresh database for every test, you don't
have to worry about cleaning up after your tests, ordering of tests
affecting failure, etc.
=head1 METHODS
=head2 new($schema)
Loads C<$schema> and returns a connection to it.
=head2 connect
Alias for new.
=head1 ENVIRONMENT
You can control the behavior of this module at runtime by setting
environment variables.
=head2 DBIC_KEEP_TEST
( run in 2.146 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )