Skip to content

Instantly share code, notes, and snippets.

@Raynos
Created December 20, 2012 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Raynos/4348981 to your computer and use it in GitHub Desktop.
Save Raynos/4348981 to your computer and use it in GitHub Desktop.
/* mock a module with faked dependencies
var x = mock("../lib/x.js", {
fs: {
readdir: function readdir() { return 42 }
}
})
*/
function mock(name, mocks) {
var moduleUri = require.resolve(name)
var old = Object.keys(mocks).reduce(function (acc, key) {
var impl = mocks[key]
, mockUri = require.resolve(key)
, oldImpl = require.cache[mockUri]
require.cache[mockUri] = {
"exports": impl
}
acc[key] = oldImpl
return acc
}, {})
var impl = getModule(moduleUri)
Object.keys(old).forEach(function (key) {
var impl = old[key]
, mockUri = require.resolve(key)
require.cache[mockUri] = impl
})
return impl
}
function getModule(moduleUri) {
if (require.modules) {
var constr = require.modules[moduleUri]
return constr()
} else {
var old = require.cache[moduleUri]
;delete require.cache[moduleUri]
var impl = require(moduleUri)
require.cache[moduleUri] = old
return impl
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment