Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
DBIx::Class schema sanity checking tests
Perl Perl6

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/Test/DBIx/Class
t
.gitignore
Changes
README.mkdn
dist.ini

README.mkdn

DESCRIPTION

It's really useful to be able to test and confirm that DBIC classes have and support a known set of methods.

Testing these one-by-one is more than tedious and likely to discourage you from writing the relevant test scripts.

As a lazy person myself I don't want to write numerous near-identical scripts.

Test::DBIx::Class::Schema takes the copy-and-paste out of DBIC schema class testing.

SYNOPSIS

Create a test script that looks like this:

#!/usr/bin/perl
# vim: ts=8 sts=4 et sw=4 sr sta
use strict;
use warnings;

# load the module that provides all of the common test functionality
use Test::DBIx::Class::Schema;

# create a new test object
my $schematest = Test::DBIx::Class::Schema->new(
    {
        # required
        dsn       => 'dbi:Pg:dbname=mydb', # or use schema option
        namespace => 'MyDB::Schema',
        moniker   => 'SomeTable',
        # optional
        username  => 'some_user',
        password  => 'opensesame',
        glue      => 'Result',             # fix class name if needed
        # rather than calling diag will test that all columns/relationships
        # are accounted for in your test and fail the test if not
        test_missing => 1,
    }
);

# tell it what to test
$schematest->methods(
    {
        columns => [
            qw[
                id
                column1
                column2
                columnX
                foo_id
            ]
        ],

        relations => [
            qw[
                foo
            ]
        ],

        custom => [
            qw[
                some_method
            ]
        ],

        resultsets => [
            qw[
            ]
        ],
    }
);

# run the tests
$schematest->run_tests();

Run the test script:

prove -l t/schematest/xx.mydb.t

Options

Either dsn (eg dbi:Pg:dbname=mydb) or schema (an already created schema object) must be set.

If the database requires credentials, set username and password.

namespace, glue and moniker define the class being tested. For example, if your class is MyDB::Schema::Result::SomeTable then use:

namespace => 'MyDB::Schema',
glue      => 'Result,
moniker   => 'SomeTable',

glue is not required if the combination of namespace and moniker is enough to define the class, e.g. MyDB::Schema::SomeTable.

done_testing

Under normal circumstances there is no need to add done_testing to your test script; it's automatically called at the end of run_tests() unless you are running tests under Test::Aggregate.

If you are running aggregated tests you will need to add

done_testing;

to your top-level script.

SEE ALSO

DBIx::Class, Test::More, Test::Aggregate

CONTRIBUTORS

Gianni Ceccarelli <dakkar@thenautilus.net>, Darius Jokilehto, Jason Tang <tang.jason.ch@gmail.com>, Rupert Lane (https://github.com/rupertl)

Something went wrong with that request. Please try again.