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 Build Status Code Climate Test Coverage Code Style Dependency Status devDependencies Status

TL;DR

1. Use a fake clock in tests

const Server = require('../server')
const request = require('request')
const clock = require('groundhog-day').fake()
const assert = require('assert')

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) => {
      assert.ok(err)
      assert.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 clock = require('groundhog-day').real()
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 clock = require('groundhog-day').fake()
clock.fix(1469563181761)

By specifying a date instance

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

By specifying a date string

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