NAME
Test::TempFile - compact way to use tempfiles in unit tests
SYNOPSIS
# Under Test::More
my $t = Test::TempFile->new([content]);
download_file($url, $t->path);
$t->exists_ok
->content_is("Expected content", 'test message')
->json_is({ foo => 'bar' }, 'expect file to be JSON' );
my $t = Test::TempFile->to_json({ a => 1 });
run_some_script( config_file => $t->path );
DESCRIPTION
This is a simple module for creating temporarily files with optional initial content, then running various tests on the state of the tempfile.
It is intended for testing code that uses files as input or output.
UTF-8 is assumed everywhere. In the future a binary/raw subclass of this module may be released.
CONSTRUCTORS
- new ( [content] )
-
Create a new tempfile. Upon creation the file will exist but be empty. When this object is destroyed, the file will be deleted if it still exists.
content
may be a string or an arrayref of strings (which will be joined using the empty string). The tempfile will be populated with this content. - to_json ( data )
-
Create a new tempfile, with content set to the JSON representation of
data
. - to_yaml ( data )
-
Create a new tempfile, with content set to the YAML representation of
data
.
INSTANCE METHODS
- path
-
Returns the string path to this tempfile.
- absolute
-
As
path
but guaranteed to be absolute. - content
-
Returns the content of this tempfile as a string.
- set_content ( content )
-
Sets the content of this tempfile.
content
may be a string, or an arrayref of strings (which are passed tojoin('', ...)
.Returns the Test::TempFile object to allow chaining.
- append_content ( content )
-
Appends
content
to the end of the tempfile.content
must be a string.Returns the Test::TempFile object to allow chaining.
- exists
-
Returns whether or not the tempfile currently exists.
- empty
-
Returns true if the file is non-existent or existent but empty.
- filehandle ( [mode] )
-
Returns a filehandle to the tempfile. The default
mode
is '>' (read-only) but others may be used ('<', '>>' etc.) - unlink
-
Unlinks (deletes) the tempfile if it exists.
- from_json
-
Interprets the tempfile contents as JSON and returned the decoded Perl data.
- from_yaml
-
Interprets the tempfile contents as JSON and returned the decoded Perl data.
TEST METHODS
These methods can be used inside unit tests. They always return the Test::TempFile object itself, so multiple tests can be chained.
- exists_ok ( [message] )
-
Asserts that the tempfile exists.
- not_exists_ok ( [message] )
-
Asserts that the tempfile does not exist.
- empty_ok ( [message] )
-
Asserts that the tempfile is empty.
- not_empty_ok ( [message] )
-
Asserts that the tempfile is not empty.
- content_is ( expected [, message] )
-
Asserts that the tempfile contents are equal to
expected
. - content_like ( expected [, message] )
-
Asserts that the tempfile contents match the regex
expected
. - json_is ( expected [, message] )
-
Asserts that the tempfile contains JSON content equivalent to the Perl data in
expected
. - yaml_is ( expected [, message] )
-
Asserts that the tempfile contains YAML content equivalent to the Perl data in
expected
. - assert ( coderef, message )
-
Calls
coderef
with$_
set to this object. Asserts that thecoderef
returns true. Returns the original object.Is useful when chaining multiple tests together:
$t->not_empty_ok ->assert(sub { $_->content =~ /foo/ }) ->assert(sub { $_->content !~ /bar/ });