1.0.4 • Published 5 years ago

require-intercept v1.0.4

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

require-intercept

Build Status npm version

A way of intercepting required Node.js module dependencies.

Installation

via npm

npm install require-intercept

Usage

./TestModule.js

const dependency = require('./TestDependency');

module.exports = class TestModule {

    getDependency() {
        return dependency;
    }

    async callDependencyAsync() {
        return new Promise(function(resolve, reject) {
          setTimeout(function() {
            resolve(dependency);
          }, 100);
        });
    }

}

./TestDependency.js

module.exports = {
    "dependencyType": "Real"
}

main.js

const requireIntercept = require('require-intercept');
const { module: TestModule, mockDependency, stopMocking, mockAround } = requireIntercept('./TestModule');

const testModule = new TestModule();
console.log("Before any mocking it calls the real TestDependency >", testModule.getDependency());
// Before any mocking it calls the real TestDependency > { "dependencyType": "Real" }

const mock = { "dependencyType": "Mocked" };

mockDependency('./TestDependency', mock);

console.log("Once mocked we have injected the mock without modifying the code structure >", testModule.getDependency());
// Once mocked we have injected the mock without modifying the code structure > { "dependencyType": "Mocked" }

stopMocking('./TestDependency');

console.log("Once we have stopped mocking we restore the original module >", testModule.getDependency());
// Once we have stopped mocking we restore the original module > { "dependencyType": "Real" }

mockAround('./TestDependency', mock, () => {
    console.log("We can inject mocks within a particular scope >", testModule.getDependency());
    // We can inject mocks within a particular scope > { "dependencyType": "Mocked" }
});

console.log("And they are automatically restored afterwards >", testModule.getDependency());
// And they are automatically restored afterwards > { "dependencyType": "Real" }

mockAround('./TestDependency', mock, async () => {
    const value = await testModule.getDependencyAsync()
    console.log("This also works with async functions >", value);
    // This also works with async functions > { "dependencyType": "Mocked" }
});

Versioning

This library uses the Semver versioning system. The numbers do not relate to maturity but the number of breaking changes introduced.

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago