Skip to content

guidesmiths/groundhog-day

Repository files navigation

groundhog-day

groundhog-day is a wrapper around Date.now() with real and fake implementations. The real implementation returns the current time, the fake implementation returns a fixed time (defaults to Groundhog day). Use the real implementation in your production code, but inject the fake implementation in tests for predictable results.

NPM version NPM downloads Node.js CI Code Climate Test Coverage

TL;DR

1. Use a fake clock in tests

const { ok, equal } = require('assert');
const { fake: clock } = require('groundhog-day');
const request = require('request');
const Server = require('../server');

describe('Server', () => {

  let server

  before((done) => {
    server = new Server(clock);
    server.start(done);
  });

  after((done) => {
    server.stop(done);
  });

  it('should set last modified header', (done) => {
    request.get('http://localhost/demo', (err, res, body) => {
      ok(err);
      equal(res.headers['last-modified'], 'Tue, 2 Feb 2016 11:00:00 GMT');  // Groundhog Day
    })
  })
})

2. Use a real clock in production

const Server = require('./server')
const { real: clock } = require('groundhog-day');
new Server(clock).start(err => {
  if (err) process.exit(1)
  console.log('Listening')
})

Fixing Time

You can configure the fixed time returned by the fake clock in any of the following ways:

By specifying the number of milliseconds

const { fake: clock } = require('groundhog-day');
clock.fix(1469563181761);

By specifying a date instance

const { fake: clock } = require('groundhog-day');
clock.fix(new Date(1469563181761));

By specifying a date string

const { fake: clock } = require('groundhog-day');
clock.fix(new Date('2016-07-26T19:59:41.761Z'))

About

An injectable clock for time based tests

Resources

Stars

Watchers

Forks

Packages

No packages published