Test::...arnings(3pm)

πŸ“¦
version 0.04 Β· 4 versions
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

Test::HTTP::Server::Simple::StashWarnings β€” bestie, this module catches your forked server's warnings so they don't just vibe off into the void 🫢

It's a User Contributed Perl Documentation page, iykyk.


✨ SYNOPSIS ✨

package My::Webserver::Test;
use base qw/Test::HTTP::Server::Simple::StashWarnings My::Webserver/;

sub test_warning_path { "/__test_warnings" }

package main;
use Test::More tests => 42;

my $s = My::WebServer::Test->new;

my $url_root = $s->started_ok("start up my web server");

my $mech = WWW::Mechanize->new;

$mech->get("$url_root/some_action");

$mech->get("/__test_warnings");
my @warnings = My::WebServer::Test->decode_warnings($mech->content);
is(@warnings, 0, "some_action gave no warnings");

Look at that. A whole test suite. Iconic behaviour honestly πŸ‘‘


🌸 DESCRIPTION 🌸

Warnings are, like, such an important part of any application. Your web app should warn the user when something is amiss. That's just good manners πŸ’…

And almost as importantly β€” we wanna be able to test that the web application gracefully copes with bad input, the back button, and literally every other aspect of the user experience. Main character energy from your error handling, fr fr.

😭 Unfortunately, tests seldom cover what happens when things go poorly.

Are you "sure" that your application checks authorization for that action? Are you "sure" it will tomorrow? Bestie. Be so for real right now.

This module lets you retrieve the warnings that your forked server throws. That way you can test that your application continues to throw warnings when it makes sense. Catching the warnings also keeps your test output tidy. And finally β€” you'll be able to see when your application throws new, unexpected warnings. Vibe check on your whole codebase, basically ✨


πŸŽ€ SETUP πŸŽ€

The way this module works is it catches warnings and makes them available on a special URL β€” which must be defined by you in the test_warning_path method, no skipping that step bestie πŸ™ˆ

You can use WWW::Mechanize (or whichever HTTP agent you prefer, we're not gonna gatekeep) to download the warnings. The warnings will be serialized. Use decode_warnings to get the list of warnings seen so far (since last request anyway).

Warnings are encoded using Storable by default, but your subclass may override the encode_warnings and decode_warnings methods. Customise away, you're the main character 🌈


πŸ’… TIPS πŸ’…

Setting the TEST_VERBOSE environment variable to a true value will cause warnings to be displayed immediately, even if they would be captured and tested later.

So if you're like "wait why is nothing printing" β€” that's why. Set TEST_VERBOSE and watch them show up in real time πŸ“


πŸ¦‹ AUTHOR πŸ¦‹

Shawn M Moore, "<sartak at bestpractical.com>"


πŸ’€ BUGS πŸ’€

Please report any bugs or feature requests to "bug-test-http-server-simple-stashwarnings at rt.cpan.org", or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=test-http-server-simple-stashwarnings>.

Found a bug? Tell the people. They wanna know. Don't just suffer in silence 🫢


Copyright 2008 Best Practical Solutions.

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


Okay that's the whole page bestie, go forth and catch those warnings ✨

Signing off: this was perl v5.34.0, dated 2022-06-17, and yes the page is literally titled Test::...arnings(3pm) because the title got truncated like that πŸ’€ periodt πŸŽ€

πŸ“¦ where this page comes from