hmpo-stubber

Create dynamic stub API services using a simple JSON configuration

Usage no npm install needed!

<script type="module">
  import hmpoStubber from 'https://cdn.skypack.dev/hmpo-stubber';
</script>

README

hmpo-stubber

Create dynamic stub API services using a simple JSON configuration

Usage

const stubber = require('hmpo-stubber');

app.use('/stubs', stubber.middleware('./services.json', 'My Stub Server'));

stubber.middleware(services, [name], [basePath]); services: Array, // array of Service config objects (can be a filename, each service can be a filename) name: String(Stub), // name of stub server for debug logging basePath: String(./), // relative location when looking up filenames

Command line interface

hmpo-stubber [options] [services.json...]

  -c, --config path::String  Use configuration from this file
  -p, --port Number          Specify port to listen on - default: 3030
  -m, --mount String         Base path to mount mocks on - default: /
  -s, --scenario String      Specify the default scenario - default: default
  -h, --help                 display help

Command line config file

{
    port: Number(3030), // port number
    mount: String('/'), // base URL to mount the standalone server
    scenario: String(), // default scenario
    stubs: Array,       // array of service filenames or service lists, 
}

Configuration

Service config object

{
    name: String,        // service name for debug logging
    method: String(GET), // method to mount in the stub server
    url: String,         // url to mount in the stub server
    scenarios: Object,   // object of named Scenario config objects
        (can be a filename, each scenario can be a filename)
    defaultScenario:
        String(default), // specify the default scenario
    sessionID: {         // locations to look for the session ID
      header: String,
      param: String,
      body: String,
      query: String
    },
    scenarioID: {        // locations to look for the scenario ID
      header: String,
      param: String,
      body: String,
      query: String
    }
}

Scenario config object

{
    responses: Array,     // array of Response config objects to step through on each call
        (can be a filename, each response can be a filename, each response can be a function)
    loop: Boolean(false), // loop around the response list instead of staying on the last response
}

Response config object

{
    body: Object,          // body to send as JSON
        (can be a filename or a function)
    status: Number(200),   // status code to respond with
    delay: Number(0),      // delay before sending the response
        (in milliseconds)
    repeat: Number(1),     // number of times to repeat this response
    close: Boolean(false), // close the connection before sending a response
}

Exposed additions to the stub req object:

req: {
  stub{
    stubtub: Stub,
    service: Service,
    scenario: Scenario,
    response: Response,
    session: {
      services: {
        [service.name]: {
          scenario: Scenario,
          scenarioID: String,
          scenarioParam: String
        }
      }
    }
  }
}