Giter VIP home page Giter VIP logo

mockrequire's Introduction

MockRequire

Simple module for mocking required dependencies. Works with any testing suite. (https://github.com/mateodelnorte/mockrequire).

Example Usage

Imagine your application uses the following module to onboard a user, in reaction to a recieved event. A service will require the module and call it, passing the event as a parameter. But, in the course of developing your application, you'd like to test the module in isolation from the rest of your code. The module depends on another module, 'my_db_lib'.

How can you test the module in isolation?

var db = require('my_db_lib');

module.exports = function onboardUser (event) {

  // we want to test this function's behavior, but need to isolate the behavior of the module apart from the behavior of it's dependency, the db. 

  db.User.findByEmail(event.email, function (err, user) {
    if(err) throw err;

    user.onboarding = 'complete';

    user.save(function (err) { 
      if(err) throw err; 
    });
  });
};

MockRequire provides a simple means of allowing you to mock dependencies of any module you require(). Want to unit test your code without ever having to hit a database, even though your code is require-ing your datastore modules directly? MockRequire is exactly what you need.

The following example uses 'mocha' and 'should' to create a unit test for the module above. We also use 'mockrequire' to mock out our dependencies, parts of our module we don't care to isolate in our test.

require('mocha'),
require('should');
var mockrequire = require('mockrequire');

var user = (function() {
  return {
    save: function (cb) {
      cb(null);
      this.saved = true;
    }
  };
})();

// instead of require()ing our handler directly, we can mockrequire() it and supply an object containing any child dependencies we would like to mock as well. Here we're mocking my_db_lib

var onboardUser = mockrequire('./handler', {
  'my_db_lib': {
    User: { 
      findByEmail: function (email, cb){
        cb(null, user);
      }
    }
  }
});

// we create our unit tests with mocha

describe('userPaymentComplete()', function(){
  onboardUser({ email: '[email protected]' });
  it('should set onboarding as \'complete\'', function() {
    user.should.have.property('onboarding').equal('complete');
  });
  it('should save user', function() {
    user.should.have.property('saved').equal(true);
  });
});

mockrequire's People

Contributors

benoneal avatar

Watchers

Henry Hutcheson avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.