Need help with mock-require?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

boblauer
452 Stars 29 Forks MIT License 80 Commits 10 Opened issues

Description

Simple, intuitive mocking of Node.js modules.

Services available

!
?

Need anything else?

Contributors list

# 117,204
web-wor...
threadi...
node-js
js
51 commits
# 13,250
Node.js
http-cl...
promise
JavaScr...
4 commits
# 584,751
JavaScr...
3 commits
# 598,591
JavaScr...
2 commits
# 209,464
PHP
Shell
seleniu...
seleniu...
2 commits
# 676,067
JavaScr...
1 commit
# 471,800
CSS
rogueli...
C
Shell
1 commit
# 23,627
ESLint
circuit...
executa...
test-fr...
1 commit
# 629,234
JavaScr...
openapi
openapi...
Shell
1 commit
# 471,236
React
Shell
CSS
HTML
1 commit
# 241
TypeScr...
Visual ...
CSS
vscode
1 commit
# 162,764
html-to...
Markdow...
viml
hashcod...
1 commit

⚠️ Deprecated

This library has been deprecated. A better alternative can found at https://www.npmjs.com/package/proxyquire.

mock-require

Simple, intuitive mocking of Node.js modules.

Build Status

About

mock-require is useful if you want to mock

require
statements in Node.js. I wrote it because I wanted something with a straight-forward API that would let me mock anything, from a single exported function to a standard library.

Usage

var mock = require('mock-require');

mock('http', { request: function() { console.log('http.request called'); }});

var http = require('http'); http.request(); // 'http.request called'

API

mock(path, mockExport)

path:

String

The module that you want to mock. This is the same string you would pass in if you wanted to

require
the module.

This path should be relative to the current file, just as it would be if you were to

require
the module from the current file. mock-require is smart enough to mock this module everywhere it is required, even if it's required from a different file using a different relative path.

mockExport :

object/function

The function or object you want to be returned from

require
, instead of the
path
module's exports.

mockExport :

string

The module you want to be returned from

require
, instead of the
path
module's export. This allows you to replace modules with other modules. For example, if you wanted to replace the
fs
module with the
path
module (you probably wouldn't, but if you did):
mock('fs', 'path');
require('fs') === require('path'); // true

This is useful if you have a mock library that you want to use in multiple places. For example:

test/spy.js
:
javascript
module.exports = function() {
    return 'this was mocked';
};

test/a_spec.js
:
javascript
var mock = require('mock-require');
mock('../some/dependency', './spy');
...

test/b_spec.js
:
javascript
var mock = require('mock-require');
mock('../some/other/dependency', './spy');
...

mock.stop(path)

path:

String

The module you that you want to stop mocking. This is the same string you would pass in if you wanted to

require
the module.

This will only modify variables used after

mock.stop
is called. For example:
var mock = require('mock-require');
mock('fs', { mockedFS: true });

var fs1 = require('fs');

mock.stop('fs');

var fs2 = require('fs');

fs1 === fs2; // false

mock.stopAll()

This function can be used to remove all registered mocks without the need to remove them individually using

mock.stop()
.
mock('fs', {});
mock('path', {});

var fs1 = require('fs'); var path1 = require('path');

mock.stopAll();

var fs2 = require('fs'); var path2 = require('path');

fs1 === fs2; // false path1 === path2; // false

mock.reRequire(path)

path:

String

The file whose cache you want to refresh. This is useful if you're trying to mock a dependency for a file that has already been required elsewhere (possibly in another test file). Normally, Node.js will cache this file, so any mocks that you apply afterwards will have no effect.

reRequire
clears the cache and allows your mock to work.
var fs = require('fs');
var fileToTest = require('./fileToTest');
mock('fs', {}); // fileToTest is still using the unmocked fs module

fileToTest = mock.reRequire('./fileToTest'); // fileToTest is now using your mock

Note that if the file you are testing requires dependencies that in turn require the mock, those dependencies will still have the unmocked version. You may want to

reRequire
all of your dependencies to ensure that your mock is always being used.
var fs = require('fs');
var otherDep = require('./otherDep') // requires fs as a dependency
var fileToTest = require('./fileToTest'); // requires fs and otherDep as a dependency
mock('fs', {}); // fileToTest and otherDep are still using the unmocked fs module

otherDep = mock.reRequire('./otherDep'); // do this to make sure fs is being mocked consistently fileToTest = mock.reRequire('./fileToTest');

Test

npm test

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.