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