ez-mock
Simple mocking of require modules.
About
I found myself repeating a similar pattern for setting up mocks for unit tests. This package encapsulates that pattern and provides a simple, yet robust, interface.
Example
We want to test a simple module addToDBValue.js
that adds an input value to a database value.
const queryDatabase = require('./database.js');
const addToDBValue = (inputValue) => {
return inputValue + queryDatabase();
}
module.exports = addToDBValue;
The only issue is that database.js
connects to an actual database.
const queryDatabase = () => {
}
module.exports = queryDatabase;
But we don't want to touch any external systems for a unit test... We can simply mock that required dependency
const {Mock, TestSubjectMocker} = require('ez-mock');
const databaseMockReturn1 = new Mock('./database.js', () => 1);
const databaseMockReturn2 = new Mock('./database.js', () => 2);
const testSubjectMocker = new TestSubjectMocker('./addToDBValue.js', databaseMockReturn1);
let addToDBValue = testSubjectMocker.generateSubject();
console.log(addToDBValue(1));
console.log(addToDBValue(2));
addToDBValue = testSubjectMocker.generateSubject(databaseMockReturn2);
console.log(addToDBValue(1));
console.log(addToDBValue(2));
API
Mock(modulePath, functionality)
modulePath: String
The module name, absolute path, or relative path to the module you wish to mock.
functionality : object/function
The functionality you wish to return when require(...)
is called.
TestSubjectMocker(modulePath, defaultMocks)
modulePath: String
The module name, absolute path, or relative path to the module you wish to test with its dependencies mocked.
defaultMocks : Mock/[Mock]
The mock behavior that will always be applied when generating a test subject.
TestSubjectMocker.generateTestSubject(overrideMocks)
defaultMocks : Mock/[Mock]
The mock behavior that overrides the default behavior for this instance of the test subject.
returns : object/function
An instance of the test subject with the mocks applied
TestSubjectMocker.clearMocks()
Clears all registered mocks (even the default mocks)