Skip to content

Latest commit

 

History

History
71 lines (57 loc) · 2.4 KB

README.md

File metadata and controls

71 lines (57 loc) · 2.4 KB

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'))