0.1.3 ā€¢ Published 6 years ago

remok v0.1.3

Weekly downloads
6
License
MIT
Repository
github
Last release
6 years ago

Remok

Remok is a simple record and replay capable mock server.

Remok graph

Features

  • Records requests
  • Replays recorded requests
  • Small footprint (only two tiny dependencies)
  • Works out of the box with zero config
  • Uses a powerful hash logic to store mocks
  • Written with future proof ECMAScript 2015 module syntax

Installation

Remok is available as the remok package on npm.

npm install --save-dev remok

How to use

API

const remok = require('remok');

const server = remok({
  server: {
    port: 3000,
  },
  mocks: {
    path: './mocks',
  },
  proxy: {
    target: 'https://some.api.tld',
  },
});

server.start();

CLI

$ remok --config ./remok.config.js
// remok.config.js
module.exports = {
  proxy: {
    target: 'https://some.api.tld',
  },
}

Test

You can test your setup by sending a request to the server:

curl http://localhost:3000/some/endpoint

Advanced usage

Manually creating a mock

Remok will always try to load a /path/to/mock/<METHOD>.@override.json file first, afterwards it searches for a /path/to/mock/<METHOD>.<REQUEST_HASH>.json file.

You can use the remok create-mock ./foo/GET CLI command in order to create a manual mock.

Activating the watch-mode mocks.watch: true will load new mocks without having to restart Remok.

Mock file structure

The following fields are required in a mock file:

{
  "time": "2018-01-01T00:00:00.000Z",
  "request": {
    "_hash": "requesthashvalue",
    "method": "GET",
    "path": "/foo/bar",
    "headers": {
      "key": "value"
    },
    "query": null,
    "body": null
  },
  "response": {
    "_hash": "responsehashvalue",
    "_time": null,
    "status": {
      "code": 201,
      "message": "custom status message"
    },
    "headers": {
      "key": "value"
    },
    "body": "I'm the response body!"
  }
}

History mode

šŸš§

API

remok([options])

Creates the Remok application.

PropertyTypeDefaultDescription
verbosebooleantrueMakes output more or less verbose
server.portnumber3000Server port
server.hoststringlocalhostServer host
mocks.recordmixedtrueWhether to record mocks. Setting this option to overwrite will overwrite existing mocks.
mocks.pathstring./remokPath used for storing recorded mocks
mocks.historyšŸš§booleanfalseUse the history mode
mocks.watchbooleanfalseReloads all mocks on every request. Useful for developing with manual mocks.
mocks.reqHashfunctionCallback; receives a Request object, should return a request hash
mocks.resHashfunctionCallback; receives a HttpResponse object, Should return a response hash
proxy.targetstringhttp://localhostThe proxy target
proxy.timeoutnumber5000Proxy request timeout in milliseconds

remok.start() async

Starts the Remok server.

remok.stop() async

Stops the Remok server.

remok.use([path,] callback) šŸš§

Mounts the specified middleware for the specified path.

PropertyTypeDescription
pathstringRoute path.
callbackmixedCallback; can be: A middleware function. A class with a invoke() method.

remok.useProxy([path,] callback) šŸš§

Mounts the specified proxy middleware for the specified path.

PropertyTypeDescription
pathstringRoute path.
callbackmixedCallback; can be: A middleware function. A class with a invoke() method.

FAQ

Why does Remok create a new mock on every request, even if the request is always the same?

In order to detect new requests, Remok calculates hashes based on the request and response data.

Please make sure to exclude request and response headers that change on every request.

In this example, body and headers are not used for calculating the hash:

// Calculates a SHA256 hash. You can use any other hash function.
const hash = require('remok/dist/hash');

remok({
  mocks: {
    requestHash: (Request) => hash(Request.method + Request.url),
  },
})

How can I handle different data on subsequent requests?

šŸš§

I have multiple test scenarios with endpoints responding with distinct data. How can I setup those scenarios?

You can setup scenarios by running Remok with a scenario-specific mock path:

// Scenario A
remok({
  mocks: {
    path: './mocks/scenario-a',
  }
});
// Scenario B
remok({
  mocks: {
    path: './mocks/scenario-b',
  }
});

Planned features

  • Middlewares
  • History mode
  • Record proxy response time

License

Remok is licensed under the MIT License - see the LICENSE file for details.

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago