Test2::Manual::Tooling::Plugin::TestingDone3p
Run code when the test file is finished, or when done_testing is called.
Overview
This is a way to add behavior to the end of a test file. This code is run either when done_testing() is called, or when the test file has no more run-time code to run.
When triggered by done_testing() this will be run BEFORE the plan is calculated and sent. This means it IS safe to make test assertions in this callback.
Complete code up front
package Test2::Plugin::MyPlugin;use Test2::API qw{test2_add_callback_testing_done};sub import {my $class = shift;test2_add_callback_testing_done(sub {ok(!$some_global, '$some_global was not set');print "The test file is done, or done_testing was just called\n"});}1;
Line by line
- use Test2::API qw{test2_add_callback_testing_done};
-
This imports the
test2_add_callback_testing_done()callback.
- test2_add_callback_testing_done(sub { ... });
-
This adds our callback to be called when testing is done.
- ok(!$some_global, '$some_global was not set')
-
It is safe to make assertions in this type of callback. This code simply asserts that some global was never set over the course of the test.
- print "The test file is done, or done_testing was just called\n"
-
This prints a message when the callback is run.
Under the hood
Before test2_add_callback_testing_done() this kind of thing was still possible, but it was hard to get right, here is the code to do it:
test2_add_callback_post_load(sub {my $stack = test2_stack();# Insure we have at least one hub, but we do not necessarily want the# one this returns.$stack->top;# We want the root hub, not the top one.my ($root) = Test2::API::test2_stack->all;# Make sure the hub does not believe nothing has happened.$root->set_active(1);# Now we can add our follow-up code$root->follow_up(sub {# Your callback code here});});
Source
The source code repository for Test2-Manual can be found at https://github.com/Test-More/test-more/.
Maintainers
- Chad Granum <[email protected]>
Releases
5 releases since OpenBSD 7.7; the text changed 2 times.