Codebase list libdist-zilla-util-test-kentnl-perl-upstream / main
main

Tree @main (Download .tar.gz)

# 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 <kentnl@cpan.org>

# COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.

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