Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kentnl/dist-zilla-util-test-kentnl

KENTNL's DZil plugin testing tool.
https://github.com/kentnl/dist-zilla-util-test-kentnl

dist-zilla perl

Last synced: 4 days ago
JSON representation

KENTNL's DZil plugin testing tool.

Awesome Lists containing this project

README

        

# NAME

Dist::Zilla::Util::Test::KENTNL - KENTNL's DZil plugin testing tool

# VERSION

version 1.005014

# DESCRIPTION

This module is KENTNL's kit for testing Dist::Zilla.

Most of his modules should be moving to using the \`dztest\` model
instead which is more flexible source side.

# METHODS

## `dztest`

Creates a [`Dist::Zilla::Util::Test::KENTNL`](https://metacpan.org/pod/Dist::Zilla::Util::Test::KENTNL::dztest) object.

This is a much more sane approach to testing than `test_config`

## test\_config

This is pretty much why this module exists. Its a little perverse, but makes testing WAY easier.

my $plugin = test_config({
dist_root => 'corpus/dist/DZT',
ini => [
'GatherDir',
[ 'Prereqs' => { 'Test::Simple' => '0.88' } ],
],
post_build_callback => sub {
my $config = shift;
# Handy place to put post-construction test code.
die $config->{error} if $config->{error};
},
find_plugin => 'SomePluginName'
});

Additionally, you can add this section

callback => {
method => 'metadata',
args => [],
code => sub {
my $data = shift;
print "Errors ( if any ) $data->{error} ";
dump $data->{response}; # response from ->metadata
$data->{instance}->doMorestuffbyhand();
# ok( .... 'good place for a test!' )
},
}

Generally, I find it easier to do 1-off function wrappers, i.e.:

sub make_plugin {
my @args = @_;
return test_config({
dist_root => 'corpus/dist/DZT',
ini => [
'GatherDir',
[ 'Prereqs' => {'Test::Simple' => '0.88' } ],
[ 'FakePlugin' => {@args } ],
],
post_build_callback => sub {
my $config = shift;
die $config->{error} if $config->{error};
},
find_plugin => 'FakePlugin',
});
}

Which lets us do

ok( make_plugin( inherit_version => 1 )->inherit_version , 'inherit_verion = 1 propagates' );

#### parameters

my $foo = test_config({
dist_root => 'Some/path' # optional, strongly recommended.
ini => [ # optional, strongly recommended.
'BasicPlugin',
[ 'AdvancedPlugin' => { %pluginargs }],
],
build => 0/1 # works fine as 0, 1 tells it to call the ->build() method.
post_build_callback => sub {
my ( $conf ) = shift;
$conf->{error} # any errors that occured during construction/build
$conf->{instance} # the constructed instance
# this is called immediately after construction, do what you will with this.
# mostly for convenience
},
find_plugin => 'Some::Plugin::Name', # makes test_config find and return the plugin that matched that name instead of
# the config instance

callback => { # overrides the return value of find_plugin if it is called
method => 'method_to_call',
args => [qw( hello world )],
code => sub {
my ($conf) = shift;
$conf->{plugin} # the constructed plugin instance
$conf->{error} # any errors discovered when calling ->method( args )
$conf->{instance} # the zilla instance
$conf->{response} # the return value of ->method( args )
# mostly just another convenience of declarative nature.
return someValueHere # this value will be returned by test_config
}
},
});

# AUTHOR

Kent Fredric

# COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Kent Fredric .

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