-$res = eval { dispell $a, $wiz };
-ok(!$@, "re-dispell croaks ($@)");
-ok($res, 're-dispell invalid');
+$res = eval { dispell $a, gensig };
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 're-dispell from wrong sig croaks');
+is($res, undef, 're-dispell from wrong sig doesn\'t return anything');
+
+$res = eval { dispell $a, undef };
+like($@, qr/Invalid\s+wizard\s+object\s+at\s+\Q$0\E/, 're-dispell from undef croaks');
+is($res, undef, 're-dispell from undef doesn\'t return anything');
+
+$res = eval { dispell $a, $sig };
+is($@, '', 're-dispell from good sig doesn\'t croak');
+ok($res, 're-dispell from good sig is valid');
+
+$res = eval { dispell my $b, $wiz };
+is($@, '', 'dispell non-magic object doesn\'t croak');
+is($res, 0, 'dispell non-magic object returns 0');