Runtime-Mock-Routes is a nodejs application for defining parameterized route and response bodies. This is ideal for mocking 3rd party services.
Use the package manager npm or yarn to install Runtime-Mock-Routes.
npm install -g @centeredgesoft/runtime-mock-routesruntime-mock-routes -p 8080 -s ./seed.jsonAll command line options are optional. If a seed file is supplied, it must be one of the following
- a json file that matches a
RuntimeRequestCollection - a js file with a default export of type
RuntimeRequestCollection - a js file with a default export of a function that returns a
RuntimeRequestCollection
type SupportedMethodsType = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
const SupportedMethodsColection: SupportedMethodsType = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
type SupportedMethod = SupportedMethodsType[number];
export interface RuntimeRequestMethodBody {
body: any;
status?: any;
headers?: Record<string, string>;
}
export type RuntimeRequestMethodBodyCollection = Partial<Record<SupportedMethod, RuntimeRequestMethodBody>>;
export interface RuntimeRequestBody {
path: string;
methods: RuntimeRequestMethodBodyCollection;
}
export interface RuntimeRequestCollection {
[path: string]: RuntimeRequestBody;
}For example:
{
"/test":{
"path":"/test",
"methods":{
"GET": {
"body": {},
"status": 200,
"headers": {
"X-Custom-Header": "yes"
}
}
}
}
}The following environment variables can also be used in place of command line options
RUNTIME_MOCK_ROUTES_PORT=8080
RUNTIME_MOCK_ROUTES_FILE_PATH=/seed.json
Route parameters are specified in path via a colon followed by the parameter name.
'/users/:id'
Template strings that are compatible with handlebars can be used for the body property of a RuntimeRequestMethodBody. The application will use path and query params as data for the tempalte. This application makes use of faker and chance as Handlebars Helpers.
{{params.<path-param-name>}} {{query.<query-param-name>}}
{{body.<post-body-property>}}
{{headers.<header-property-name>}}
{{ faker "lorem.words" 5}} {{ chance "guid"}}
If the rendered template is valid JSON, the response will be of type application/json.
Also, be aware that instead of a direct JSON response, the body can also be a function that takes in a RequestParameters and returns a body response. The response will still be processed through handlebars.
GET /returns all of the currently defined routesPOST /Takes aRuntimeRequestBodyand adds it to the collection or updates the existing entry if it exists.PUT /Takes aRuntimeRequestCollectionand replaces the current collection.[GET,POST,PUT,PATCH,DELETE] /*The result of retrieving an entry in the collection, 404 otherwiseDELETE /?path=<path>Deletes items from the collection
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to add/update tests as appropriate.