Quite often people will write code which tests to see if
$ENV{HARNESS_ACTIVE} is true. For example, this allows them to not
email support from their code while testing. This variable is set in
Test::Harness. However, this causes a problem when someone
accidentally does this:
perl t/email_support.t
You can verify this behavior by running this with 'perl' and 'prove'.
It will fail when run through Perl.
use Test::More tests => 1;
ok $ENV{HARNESS_ACTIVE}, 'running in the test harness';
Since I have ',r' and ',t' bound to ':!perl %<cr>' and ':!prove -lv
%<cr>' in vim, it's easy for me to mistype this since those keys are
next to each other.
I am going to add the HARNESS_ACTIVE environment variable to
TAPx::Harness, but having something like $ENV{RUNNING_TESTS} in
Test::Builder so that users can be trained to know if tests are really
running or not. As a workaround, you can fake it with this:
package My::Test::More;
use Test::Builder::Module;
@ISA = qw(Test::Builder::Module);
use Test::More;
@EXPORT = @Test::More::EXPORT;
$ENV{HARNESS_ACTIVE} = 1;
1;
And then just 'use My::Test::More tests => $tests' in your code. That
will always set the environment variable and provide some measure of
safety. That protects someone accidentally running 'perl t/test.t',
but clearly the harness really isn't active then, so it's a bit of a
hack.
Thoughts?
Cheers,
Ovid
--
Buy the book -- http://www.oreilly.com/catalog/perlhks/
Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/