Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rewiremock

Package Overview
Dependencies
Maintainers
1
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rewiremock

Easy and es6 compatible mocking tool

  • 1.0.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
56K
increased by18.11%
Maintainers
1
Weekly downloads
 
Created
Source

rewiremock Build Status

NPM

Simple es6-friendly mocking library inspired by the best libraries:

  • mockery - the library I like more.
  • mock-require - the simplest thing ever.
  • proxyquire - the one I know better than others.

By its nature rewiremock has same behavior as Mockery. But it can have any behavior. It covers any cases.

Rewiremock is an evolution of my way of explorations: the better proxyquire, the way ofresolveQuire, and magic of proxyquire-webpack-alias.

Rewiremock was initially named as mockImports or mockModule. But was renamed for WireMock.

We shall not use that name, but rewire - is one of existing micking library.

Idealogy

  • be simply
  • be modular
  • be secure
  • be fast

Setup

First - define your mocks. You can do it in any place, this is just a setup.

 import rewiremock from 'rewiremock';
 ...
 
 // totaly mock `fs` with your stub 
 rewiremock('fs')
    .with({
        readFile: yourFunction
    });
  
 // replace path, by other module 
 rewiremock('path')
    .by('path-mock');
  
 // replace default export of ES6 module 
 rewiremock('reactComponent')
    .withDefault(MockedComponent)
 
 // replace only part of some library and keep the rest 
 rewiremock('someLibrary')
    .callThought() 
    .with({
        onlyOneMethod
    })

Running

Just enabled, and dont forget to disable.

 //in mocha tests
 beforeEach( () => rewiremock.enable() );
 //...
 const someModule = require('someModule');
 //...
 afterEach( () => rewiremock.disable() );

On enable rewiremock will wipe from cache all mocked modules, and all modules which requares them.

Including your test.

On disable it will repeat operation.

All test unrelated modules will be keept. Node modules, react, common files - everything.

As result - it will run faster.

Plugins

By default - rewiremock has limited features. You can extend it behavior by using plugins.

  • nodejs. Common support to usual node.js application. Will absolutize all paths.
  • relative. Proxyquire-like behavior. Will overide only first level deps.
  • webpack-alias. Enabled you to use webpack aliases as module names.

Nested declarations

Each time you require rewiremock - you will get brand new rewiremock.

You cannot declare mocks library - it will erase itself.

But solution exists, and it is simply -

// require rewiremock in test file
 import rewiremock from 'rewiremock';
 
// require nested one in library file
 import rewiremock from 'rewiremock/nested';
// now you can defile dictionary or library of mocks 

See _test/nested.spec.js.

Isolation

Unit testing requires all decencies to be mocked. All! To enable it, run

 rewiremock.isolation();
 //or
 rewiremock.withoutIsolation();

Then active - rewiremock will throw error on require of any unknown module.

Unknown is module which is nor mocked, nor marked as passthrough.

To enable few modules to in invisible to rewiremock run

rewiremock.passBy(/*pattern or function*/);

rewiremock.passBy(/common/);
rewiremock.passBy(/React/);
rewiremock.passBy(/node_modules/);
rewiremock.passBy((name) => name.indexOf('.node')>=0 )

Thats all. Happy mocking!

Keywords

FAQs

Package last updated on 30 May 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc