Skip to content
provides a simple convention based solution to overriding dependencies in node.js
JavaScript
Find file
Latest commit e9a1624 @AndrewKeig 0.0.2
Failed to load latest commit information.
examples 0.0.1
lib 0.0.1
test 0.0.1
.gitattributes 0.0.0
.gitignore 0.0.0
.npmignore 0.0.0
README.md 0.0.1
index.js 0.0.1
package.json 0.0.2

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

Something went wrong with that request. Please try again.