roam-swagger-mock-server
v1.0.7
Published
Mock server toolkit that uses Swagger and TypeScript
Downloads
27
Readme
roam-swagger-mock-server
An npm module and cli tool that provides quick and easy way for creating full or partial mock of Sauce backend APIs.
Installation
The module is supposed to be installed globally:
npm i roam-swagger-mock-server -g
Usage
- Create a folder with
swagger.json
- Run
swagger-mock init
- Edit
index.ts
for your needs - Run
swagger-mock
to start mock server
Mock implementation
After running init you will see a generted index.ts
file. That file contains a blank class for your mock controller:
import {IMockSauceController, start} from './mock-interface';
import {ReqContext} from 'roam-swagger-mock-server';
class Controller implements Partial<IMockSauceController> {
//put your implementation here if needed
}
start(new Controller(), {
port: 4000,
proxy: 'http://localhost:3000'
});
There are three ways to operate the mock:
- Simple JSON file response
- Custom implementation
- Proxying to real API
Mock server follows logic: first, it tries to find method implementation in your Controller, then it tries to find mock JSON file within your folder (.json), finally it tries to proxy it to original API.
Simple JSON file response
Place a json file named <methodName>.json
anywhere within your folder.
Example: Your API has a method getPetById
(taken from swagger pet store).
getPetById.json
{
"petName": "Harry",
"petType": "parrot"
}
Custom implementation
In this example, we are mocking getPetById method from the API with our own implementation.
Depending on provided petId mock server will return different results:
import {IMockSauceController, start} from './mock-interface';
import {ReqContext} from 'swagger-mock-server';
class Controller implements Partial<IMockSauceController> {
async getPetById(reqContext: ReqContext, petId: number): Promise < any > {
if (petId == 1) {
return {
"petName": "Harry",
"petType": "parrot"
}
} else {
return {
"petName": "Potter",
"petType": "parrot"
}
}
}
}
start(new Controller(), {
port: 4000,
proxy: 'http://localhost:3000'
});
Custom implementation and proxying at the same time
In this example, we are mocking getPetById method from the API with our own implementation but only for certain petId, all other id requests get flow to the original API.
import {IMockSauceController, start} from './mock-interface';
import {ReqContext} from 'swagger-mock-server';
class Controller implements Partial<IMockSauceController> {
async getPetById(reqContext: ReqContext, petId: number): Promise < any > {
if (petId == 1) {
return {
"petName": "Harry",
"petType": "parrot"
}
} else {
return reqContext.proxy();
}
}
}
start(new Controller(), {
port: 4000,
proxy: 'http://localhost:3000'
});