[dancer-users] Devel::Cover and Dancer

Daniel Perrett dp13 at sanger.ac.uk
Tue Mar 17 11:19:51 GMT 2015


What's put me off implementing the sub _dancer approach is that (as far as I can see) you need to do that in every module that provides routes, which might be dozens; it would be preferable not to have to go through each one and make sure they're in a _dance block. If you mix routes and functions... I guess it would still work, but it would feel a bit strange having other subs within sub _dance{...}. 

Paul's email has triggered a thought, and indeed the following hack works for me (on Dancer1 anyway, which is present on the machine I'm on right now). There is probably a much better way of generating $name that won't cause conflicts (maybe refaddr?). The question is - where should something like this go? 

sub get {
  my $route = shift;
  my $code  = shift;
  my $name  = $route =~ s/[^a-z0-9]/_/rig;
  my ($pkg) = caller;

  Sub::Install::install_sub({
    code => $code,
    into => $pkg,
    as   => $name
  }) if 1;
  Dancer::get $route, $code;
}
# Setting "if 1" to "if 0" falsely gives me 100% coverage, so it's definitely the install_sub that's doing it.

Daniel

-----Original Message-----
From: dancer-users [mailto:dancer-users-bounces at dancer.pm] On Behalf Of Paul Johnson
Sent: 17 March 2015 10:02
To: Perl Dancer users mailing list
Subject: Re: [dancer-users] Devel::Cover and Dancer

On Tue, Mar 17, 2015 at 11:25:53AM +0200, Gabor Szabo wrote:
> When last time I ran the tests of my Dancer2 based app through 
> Devel::Cover it did not provide any report for the routes. If I use 
> names subroutines and set them as
> 
> get '/' => \&serve_index;
> sub serve_index {
> }
> 
> then Devel::Cover takes those subs into account.
> 
> Do you know how can I convince Devel::Cover to report properly even 
> with anonymous subs?

This is something I still want to fix within Devel::Cover if I can.  But for now, the best workaround that I have is to put everything into a sub and call that:

    sub _dancer {

    get '/' => sub {
    }

    get '/login' => sub {
    }

    }

    _dancer;

Not ideal, but perhaps the best of a bad bunch.  Unless anyone has a better suggestion?

--
Paul Johnson - paul at pjcj.net
http://www.pjcj.net
_______________________________________________
dancer-users mailing list
dancer-users at dancer.pm
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users


-- 
 The Wellcome Trust Sanger Institute is operated by Genome Research 
 Limited, a charity registered in England with number 1021457 and a 
 company registered in England with number 2742969, whose registered 
 office is 215 Euston Road, London, NW1 2BE. 


More information about the dancer-users mailing list