Skip to content

Latest commit

 

History

History
212 lines (137 loc) · 4.45 KB

README.md

File metadata and controls

212 lines (137 loc) · 4.45 KB

chronokinesis

Build Status Coverage Status

Mock time and date for traveling and freezing. Inspired and borrowed from timekeeper.

Introduction

Mock Date and Date.now in order to help you test time-dependent code. Provides travel, freeze, and timezone functionality for your Node.js tests.

const ck = require('chronokinesis');

ck.freeze();

setTimeout(() => {
  // Frozen
  console.log(new Date());

  ck.reset();
}, 2000);

or use with moment:

const moment = require('moment');
const ck = require('chronokinesis');

ck.travel(moment().add(1, 'year'));

setTimeout(() => {
  // Date traveled one year and some
  console.log(new Date());

  ck.reset();
}, 2000);

API Reference

freeze([...args])

Freeze point in time. Calls can be made with the same arguments as the Date constructor.

  • ...args: Optional date constructor arguments, if empty stops time at now
const ck = require('chronokinesis');

ck.freeze('1942-01-08');

setTimeout(() => {
  // Frozen
  console.log(new Date());

  ck.reset();
}, 2000);

travel([...args])

Time travel to another era. Calls can be made with the same arguments as the Date constructor

  • ...args: Optional date constructor arguments, pretty useless if empty but won´t crash
const ck = require('chronokinesis');
let date = new Date(2018, 0, 31);

ck.travel(date);

setTimeout(function() {
  console.log(new Date());
  ck.reset();
}, 1500);

When used in combination with freeze the time is still frozen but at the travelled time().

const ck = require('chronokinesis');
const moment = require('moment');

let date = new Date(2018, 0, 31);

ck.freeze(date);

ck.travel(moment().add(1, 'year'));

setTimeout(function() {
  console.log(`Still frozen but one year ahead ${new Date()}`);

  ck.reset();
}, 1500);

defrost()

Defrost a frozen point in time. Used in combination with travelling will start ticking the clock.

const ck = require('chronokinesis');

ck.freeze(1980, 0, 1);

// Travel one year
ck.travel(1981, 1, 1);

// Start ticking
ck.defrost();

setTimeout(() => {
  // Tick tack
  console.log(new Date());

  ck.reset();
}, 2000);

reset()

Resets Date to current glory.

const ck = require('chronokinesis');

ck.freeze(2060, 0, 1);
console.log(`end of time is reached at ${new Date()} according to Newton`)

ck.reset();

// Today
console.log(new Date())

isKeepingTime()

Utility function to see if we still travel or freeze time.

const ck = require('chronokinesis');

console.log(ck.isKeepingTime() ? 'Is' : 'Not', 'keeping time');
ck.travel(1893448800000);
console.log(ck.isKeepingTime() ? 'Is' : 'Not', 'keeping time');

timezone(timeZone)

Freeze and travel in different time zones.

const ck = require('chronokinesis');

const tz = ck.timezone('Asia/Shanghai');

tz.freeze();

timezone freeze([...args])

Freeze at the specific timezone.

timezone travel([...args])

Start traveling in the specific timezone.

timezone reset()

Same as #reset

timezone defrost()

Same as #defrost

Distributions

The module is prepared for browser and rollup.

Browser

Use dist/chronokinesis.js. Sets global property chronokinesis.

Rollup

jsnext:main: dist/index.es.js

Acknowledgements

chronokinesis initial code is inspired and borrowed from timekeeper