Test::MockDateTime(3pm)

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.

  1. 11
  2. 12–13

Author

Wolfgang Kinkeldei, <[email protected]>

License

This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

From libtest-mockdatetime-perl 0.02-4 in Debian 13 (Trixie). Parsed by carta from the page's man source.