provides a simple convention based solution to overriding dependencies in node.js
JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
test
.gitattributes
.gitignore
.npmignore
README.md
index.js
package.json

README.md

enquire.js

provides a simple convention based solution to overriding dependencies in node.js.

enquire is a simple wrapper around the require module; which allows you to require alternative; environment specific implementations of a module.

using nodes core process.env.NODE_ENV environment variable we can setup alternative implementations for unit/integration testing; development, uat and production environments etc..

Installation

$ npm install enquire

Features

using enquire to import dependencies allows you to do some interesting things:

  • provide alternative implementations to your modules when in different environments
  • stub io bound modules in a unit testing environment
  • run integration tests against alternative implementations; for example an in-memory data stores
  • simplify development and debugging by providing stubbed out io bound modules
  • re-use tests by running the same test as a unit or integration test by simply setting process.env.NODE_ENV to for example 'unit' or 'integration'

API

  • load an environment specific implementation of a module based on the current state of process.env.NODE_ENV

    var some-module = enquire.load('/some-module');

  • register an environment/path pair; this override allows you to store alternative implementations in different locations.

    enquire.register('uat', 'path-to-uat-modules');

    by default enquire supports a convention whereby alternative implementations are located under the folder of the default implementation. For example:

    /some-module/ /some-module-unit/ /some-module-integration/ /some-module-uat/

Examples for registering environment/paths

Example 1;

given I do not register any environment/path and I have an alternative implementation to a module with the following folder structure

    /path/some-module/
	/path/some-module-unit-testing/

when i request a module in a unit testing environment

	process.env.NODE_ENV = 'unit-testing';
	
	var module = enquire.load("some-module");

then the module requested should be located in this location

	/path/some-module-unit-testing/

Example 2;

given I register the following environment/path

	enquire.register('unit-testing', '/path/');

when i request a module in a unit testing environment

	process.env.NODE_ENV = 'unit-testing';
	
	var module = enquire.load("some-module");

then the module requested should be located in this location

	/path/some-module-unit-testing/

Examples for loading modules

Example 1;

given process.env.NODE_ENV is in its default state

when we request the module with enquire

var module = enquire.load('some-module');

then return some_module

Example 2

given process.env.NODE_ENV is set to 'uat'

process.env.NODE_ENV = 'uat'

when we request some_module

 var module = enquire.load('some_module');

then return some_module-uat

Example 3

given process.env.NODE_ENV is in its default state

when we request some_module overriding environment parameter as "uat"

 var module = enquire.load('../test/doubles', "uat");

then return some-module-uat