roam-swagger-mock-server
TypeScript icon, indicating that this package has built-in type declarations

1.0.7 • Public • Published

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:

  1. Simple JSON file response
  2. Custom implementation
  3. 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'
});

Readme

Keywords

none

Package Sidebar

Install

npm i roam-swagger-mock-server

Weekly Downloads

3

Version

1.0.7

License

ISC

Unpacked Size

101 kB

Total Files

31

Last publish

Collaborators

  • fyodorvi