The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Test::DBIC - Facilitates Automated Testing for DBIx::Class

SYNOPSIS

In your test script add this block:

  BEGIN {
      use Test::DBIC;

      eval 'require DBD::SQLite';
      if ($@) {
          plan skip_all => 'DBD::SQLite not installed';
      } else {
          plan tests => 1;  # change this to the correct number of tests
      }
  };

  my $schema = Test::DBIC->init_schema(
      sample_data_file => 't/var/sample_data.txt',
  );

DESCRIPTION

This module facilitates testing of DBIx::Class components.

It is planned that this module will supercede or be superceeded by the testing module distributed within DBIx::Class. The hope is for this merge to happen in the 0.09x release of DBIx::Class.

This module allows you to use the testing functionality before it is released as a core component of DBIx::Class. In other words, the API might change, but if you need to test, this module is available as a bleeding-edge version before the next major version of DBIx::Class is released.

Methods

db_dir

Gets/sets the directory where SQLite database files will be stored.

  Test::DBIC->db_dir(catdir('t', 'var'));
db_file

Gets/sets the name of the main SQLite database file.

  Test::DBIC->db_file('test.db');
init_schema

Removes the test database under db_dir and then sets up a new test database and returns a DBIx::Class schema object for your test to use.

Parameters are:

existing_namespace

Look for ResultSource (table definition) classes under this namespace, rather than in the schema namespace specified by schema_class.

namespace

Subclass ResultSet objects into this namespace. Objects that you get back will be under this namespace.

no_deploy

If true, will not set up a test database nor populate it with sample data.

sqlt_deploy

If true, will call the experimental $schema->deploy(). Also triggered if the DBICTEST_SQLT_DEPLOY environment variable is set.

The default is to read the file t/lib/sqlite.sql and execute the SQL within.

eval_deploy

If true, and if using sqlt_deploy, will not die when the test database fails to initialize.

no_populate

If true, will not populate the test database with sample data.

clear

If true, will delete any existing data in the test database before populating with sample data.

sample_data

Specifies data to use when populating the test database.

The format is:

  'sample_data' => [
      ResultSourceName => [
          ['column1', 'column2', 'column3'],
          ['data1', 'data2', 'data3'],
          ['data1', 'data2', 'data3'],
      ],
      ResultSourceName => [
          ...
      ],
  ],

The ResultSourceName is the string passed to $schema->resultset.

sample_data_file

Specifies a file which contains data to use when populating the test database.

The format for the file is:

  ResultSourceName
  column1, column2, column3
  data1, data2, data3
  data1, data2, data3
  ---
  ResultSourceName
  ...

The ResultSourceName is the string passed to $schema->resultset.

Data for multiple tables may be specified, with a separator line of --- between them.

schema_class

The name of the DBIx::Class schema to use. Defaults to Test::DBIC::Schema.

deploy_schema

Called by init_schema. Creates tables in the test database.

clear_schema

Called before populating the test database, if clear has been set to true. Deletes data from known tables.

populate_schema

Called by init_schema. Loads sample data into the test database.

SEE ALSO

DBIx::Class

AUTHOR

Nathan Gray <kolibrie@cpan.org>

based on DBICTest (from the testsuite of DBIx::Class) and DBIC::Test (from the testsuite of DBIx::Class::InflateColumn::Currency)

COPYRIGHT AND LICENSE

Copyright (C) 2007 by Nathan Gray

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.