Introduction to Proxyquire
Proxyquire is an essential tool for mocking dependencies during testing in JavaScript. It provides seamless module mocking, allowing developers to isolate and test their code efficiently. This article will introduce Proxyquire and its APIs, with numerous code snippets to help you get started.
Installation
npm install proxyquire --save-dev
Basic Usage
const proxyquire = require('proxyquire'); const stubs = { './dependency': { fn: () => 'mocked function' } }; const myModule = proxyquire('./myModule', stubs);
API Examples
1. Mocking Single Dependency
const proxyquire = require('proxyquire'); const dependencyStub = { fetchData: () => 'mocked data' }; const myModule = proxyquire('./myModule', {'./dependency': dependencyStub});
2. Mocking Multiple Dependencies
const proxyquire = require('proxyquire'); const stubs = { './dependency1': { fn1: () => 'mocked fn1' }, './dependency2': { fn2: () => 'mocked fn2' } }; const myModule = proxyquire('./myModule', stubs);
3. Dynamic Stubs
const proxyquire = require('proxyquire').noCallThru(); const stub = { dependency: sinon.stub().returns('mocked data') }; const myModule = proxyquire('./myModule', { './dependency': stub.dependency });
4. Using noPreserveCache
const proxyquire = require('proxyquire').noPreserveCache(); const stub = { './dependency': { fn: () => 'mocked' }}; const myModule = proxyquire('./myModule', stub);
Example Application
// app.js const db = require('./db'); const app = { getUser: (id) => db.find({ id }) }; module.exports = app; // test.js const proxyquire = require('proxyquire'); const dbStub = { find: (query) => ({ id: query.id, name: 'Mock User' }) }; const app = proxyquire('./app', { './db': dbStub }); describe('App Module Tests', () => { it('should return mock user data', () => { const user = app.getUser(1); assert.deepEqual(user, { id: 1, name: 'Mock User' }); }); });
Conclusion
Proxyquire is a powerful tool that simplifies dependency mocking, making it easier to write robust tests. With the above examples, you should be able to get started with Proxyquire and integrate it into your testing workflow.
Hash: 727c0744699424b4e906735cd48322bf075a16b37c67e208a956f7304ea9ce84