Skip to content
DBIx::Class schema sanity checking tests
Perl Shell
Find file
Latest commit a3aeb4d Dec 23, 2015 @chiselwright v1.0.9
 - add ContributorsFromGit
   and remove hand-written contributors
 - add CopyFilesFromBuild
 - allow README.mkdn to be 'dirty' from git's perspective

README.mkdn

NAME

Test::DBIx::Class::Schema - DBIx::Class schema sanity checking tests

VERSION

version 1.0.9

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.

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.

SEE ALSO

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

AUTHOR

Chisel Wright chisel@chizography.net

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Chisel Wright.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

CONTRIBUTORS

Something went wrong with that request. Please try again.