use strict; use warnings; use Test::More; use Test::Warn; use Promises qw(deferred), 'warn_on_unhandled_reject' => [1]; warning_like { my $d = deferred(); $d->then(sub {die "boo"})->then(sub { 'stuff' }); $d->resolve; } qr!Promise's rejection.*boo.*at t/warnings.t line 11!s, "catch a die"; warning_like { my $d = deferred(); $d->then(sub { "boo"})->then(sub { 'stuff' }); $d->reject(1,2,3); } qr!Promise's rejection.*line 17!s, "catch regular reject"; warning_like { my $d = deferred(); $d->then(sub { "boo"})->then(sub { 'stuff' }); $d->reject(1,2,3); } qr!Promise's rejection \[ 1, 2, 3 \].*line 23!s, "nicely formatted single-line rejection dump"; done_testing;