Test::MockDateTime3pm
Mock datetime->now calls during tests
Usage
use Test::More;use Test::MockDateTime;use DateTime;on '2013-01-02 03:04:05' => sub {# inside this block all calls to DateTime::now# will report a mocked date.my $now = DateTime->now;is $now->ymd, '2013-01-02', 'occured now';};done_testing;
Version
version 0.02
Overview
Getting the current time sometimes is not very helpful for testing scenarios. Instead, if you could obtain a known value during the runtime of a testcase will make your results predictable.
Why another Date Mocker? I wanted something simple with a very concise usage pattern and a mocked date should only exist and stay constant inside a scope. After leaving the scope the current time should be back. This lead to this tiny module.
This simple module allows faking a given date and time for the runtime of a subsequent code block. By default the "on" keyword is exported into the namespace of the test file. The date to get mocked must be in a format that is recognized by DateTime::Format::DateParse.
on '2013-01-02 03:04:05', sub { ... };
is basically the same as
{my $now = DateTime::Format::DateParse->parse_datetime('2013-01-02 03:04:05');local *DateTime::now = sub { $now->clone };... everything from code block above}
A drawback when relying on this module is that you must know that the module you are testing uses "DateTime->now" to obtain the current time.
Functions
on $date_and_time, \&code
mocks date and time and then executes code
Caveats
This module only mocks calls to "DateTime->now". All other ways to obtain a current time are not touched.
Releases
3 releases since Debian 11 (Bullseye); the text changed 1 time.