require-proxy-mock
v0.6.1
Published
Mock require calls using ES6 Proxy
Downloads
10
Readme
require-proxy-mock
Automatically and transparently patches all require
calls (Module._load) to return an ES6 Proxy wrapper around the original module's export(s) which can later be mocked/unmocked as required.
Somewhat similar to proxyquire, rewire, and Jest's automock.
Requires Node v6+ (try 10+ if you're getting errors like this)
Install
npm install --save-dev require-proxy-mock
Usage
API
const { mock } = require('require-proxy-mock')
mock(dep, mock)
mock({dep: mock, ...})
mock(Map {dep => mock, ...})
dep
[string|regex]
Require request of the dependency to mock.mock
Mock that replaces the required dependency.
Example
Important: Require once before loading any other modules:
mocha --require require-proxy-mock **/*.test.js
Then require it as an object in your test(s) and add/remove properties on it with the same key names as the originally required files you want to mock:
main.js
- A typical module file; no change required hereconst someLib = require('some-lib') ^^^^^^^^ will be mocked module.exports = someLib
some-lib.js
- Dependency that'll be mockedmodule.exports = () => 'ORIGINAL'
main.test.js
const {mock} = require('require-proxy-mock') const main = require('./main') describe('main', () => { let unmock before(() => { unmock = mock('some-lib', () => 'CHANGED') ^^^^^^^^ mocked }) it('should mock', () => { assert(main(), 'CHANGED') }) after(() => { unmock() }) })
Limitations
Cannot mock primitives (since they can't be proxied).