```{index} single: Test2::Require ``` # Test2::Require Base class and documentation for skip-unless type test packages. ## DESCRIPTION Test2::Require::\* packages are packages you load to ensure your test file is skipped unless a specific requirement is met. Modules in this namespace may subclass [Test2::Require](Require.md) if they wish, but it is not strictly necessary to do so. ## HOW DO I WRITE A 'REQUIRE' MODULE? ### AS A SUBCLASS ```perl package Test2::Require::Widget; use strict; use warnings; use base 'Test2::Require'; sub HAVE_WIDGETS { ... }; sub skip { my $class = shift; my @import_args = @_; if (HAVE_WIDGETS()) { # We have widgets, do not skip return undef; } else { # No widgets, skip the test return "Skipped because there are no widgets" unless HAVE_WIDGETS(); } } 1; ``` A subclass of [Test2::Require](Require.md) simply needs to implement a `skip()` method. This method will receive all import arguments. This method should return undef if the test should run, and should return a reason for skipping if the test should be skipped. ### STAND-ALONE If you do not wish to subclass [Test2::Require](Require.md) then you should write an `import()` method: ```perl package Test2::Require::Widget; use strict; use warnings; use Test2::API qw/context/; sub HAVE_WIDGETS { ... }; sub import { my $class = shift; # Have widgets, should run. return if HAVE_WIDGETS(); # Use the context object to create the event my $ctx = context(); $ctx->plan(0, SKIP => "Skipped because there are no widgets"); $ctx->release; } 1; ``` ## SOURCE The source code repository for Test2-Suite can be found at `https://github.com/Test-More/test-more/`. ## MAINTAINERS - Chad Granum ## AUTHORS - Chad Granum ## COPYRIGHT Copyright Chad Granum . This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See `http://dev.perl.org/licenses/` ## Modules - [`Test2::Require::AuthorTesting`](Require/AuthorTesting.md) - Only run a test when the AUTHOR\_TESTING environment variable is set. - [`Test2::Require::AutomatedTesting`](Require/AutomatedTesting.md) - Only run a test when the AUTOMATED\_TESTING environment variable is set. - [`Test2::Require::EnvVar`](Require/EnvVar.md) - Only run a test when a specific environment variable is set. - [`Test2::Require::ExtendedTesting`](Require/ExtendedTesting.md) - Only run a test when the EXTENDED\_TESTING environment variable is set. - [`Test2::Require::Fork`](Require/Fork.md) - Skip a test file unless the system supports forking - [`Test2::Require::Module`](Require/Module.md) - Skip tests if certain packages are not installed, or insufficient versions. - [`Test2::Require::NonInteractiveTesting`](Require/NonInteractiveTesting.md) - Only run a test when the NONINTERACTIVE\_TESTING environment variable is set. - [`Test2::Require::Perl`](Require/Perl.md) - Skip the test unless the necessary version of Perl is installed. - [`Test2::Require::RealFork`](Require/RealFork.md) - Skip a test file unless the system supports true forking - [`Test2::Require::ReleaseTesting`](Require/ReleaseTesting.md) - Only run a test when the RELEASE\_TESTING environment variable is set. - [`Test2::Require::Threads`](Require/Threads.md) - Skip a test file unless the system supports threading ```{toctree} :hidden: :maxdepth: 1 Require/AuthorTesting Require/AutomatedTesting Require/EnvVar Require/ExtendedTesting Require/Fork Require/Module Require/NonInteractiveTesting Require/Perl Require/RealFork Require/ReleaseTesting Require/Threads ```