# NAME App::Prove::Plugin::MultipleConfig - set multiple configs for parallel prove tests # SYNOPSIS prove -j3 -PMySQLPool t::Prepare,./config/config1.pl,./config/config2.pl,./config/config3.pl # DESCRIPTION App::Prove::Plugin::MultipleConfig is [prove](https://metacpan.org/pod/prove) plugin for setting multiple configs for parallel test. This plugin enables you to change each environment for each test. For example, if you want to use some databases and redis when testing, each test can use a different database and redis. First, you make config files, the number of files is -j(the number of jobs). Each test reads this config file like `do $config_path;`. # ./config/config1.pl my $config = +{ 'DB' => { uri => 'DBI:mysql:database=test_db;hostname=127.0.0.1;port=10002', username => 'root', password => 'root', }, 'REDIS' => +{ server => '127.0.0.1:20003', }, }; $config; Next, you make a module for initializing tests. This method is called **once every config** before starting tests. This module must have a `prepare` method whose second argument is a config path. # t/Prepare.pm sub prepare { my ($self, $config) = @_; my $conf = do $config; my $uri = $conf->{DB}->{uri}; $uri =~ s/database=.+?;/database=mysql;/; # use mysql table my $dbh = DBI->connect($uri, $conf->{DB}->{username}, $conf->{DB}->{password}, {'RaiseError' => 1} ); .... } In the end, you pass arguments to prove for specifying prepare module and config files paths. This format is comma-separated value(CSV). First value is prepared module name. Subsequent values are config files path. prove -j3 -PMySQLPool t::Prepare,./config/config1.pl,./config/config2.pl,./config/config3.pl Congratulations! In each test, you can read `ENV{PERL_MULTIPLE_CONFIG}` which returns a config path. # your test code my $config_path = $ENV{PERL_MULTIPLE_CONFIG}; my $conf = do $config_path; # LICENSE Copyright (C) takahito.yamada. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. # AUTHOR takahito.yamada # SEE ALSO [prove](https://metacpan.org/pod/prove), [App::Prove::Plugin::MySQLPool](https://metacpan.org/pod/App%3A%3AProve%3A%3APlugin%3A%3AMySQLPool)