houseabsolute / test-class-moose

Serious testing for serious Perl
http://metacpan.org/release/Test-Class-Moose/
Other
18 stars 32 forks source link

Throwing an exception object in a test control method results in the object being dumped to the screen #102

Open oschwald opened 4 years ago

oschwald commented 4 years ago

When an exception object is thrown from a test control method while using prove, the contents of the object are dumped to the screen rather than the stringified object.

For instance, with:

package TestsFor::Exception;

use Test::Class::Moose;
use Throwable::Error;

sub test_setup {
    Throwable::Error->throw('goodbye');
}

sub test_ok {
    ok(1);
}

package main;

use Test::Class::Moose::CLI;
Test::Class::Moose::CLI->new_with_options->run;

You get these 614 lines of output.

Note that this does not happen with yath. It could arguably be a bug in the Test2 TAP formatter. However, it is limited to exceptions in TCM test control methods.

autarch commented 4 years ago

Something somewhere has decided to Data::Dumper::Dumper the argument it was given instead of just stringifying it. I'm not sure what in the chain is doing that, but it's well after the flow of execution leaves TCM.

@exodist, any idea what's going on here?

autarch commented 4 years ago

To provide a bit more context, the exception is being passed to a context method like this:

$ctx->ok( 0, "$class->$phase failed", [$error] );

Where $error is the exception object.