@deu/mimic
TypeScript icon, indicating that this package has built-in type declarations

1.2.1 • Public • Published

Mimic

Service to create mockserver with with zero configuration. Mimic uses express server with useful middlewares to provide simple application to create mock responses.

Getting started

# Create app folder with templates
mkdir -p mock/templates

# Init npm
cd mock && npm init -y

# Install
npm i @deu/mimic
npx mimic --version
npx mimic --help

# Create main file
cat << EOF > main.js
const { Mimic } = require('@deu/mimic');
Mimic.root.get('/greet', (req, res) => {
    res.json({
        data: 'hello world!'
    })
});
EOF

# Start mimic
DEBUG=mimic* npx mimic

# To use separate base folder
mkdir subfolder
mv templates subfolder/
mv main.js subfolder/
# mock/subfolder/
# ├── main.js
# └── templates

# Start mocking application in another folder and port
DEBUG=mimic* npx mimic -d subfolder -p 3000

Usage

// main.js
const { Mimic } = require('@deu/mimic');

Mimic.root.get('/greet', (req, res) => {
    res.json({
        data: 'hello world!'
    })
});

Mimic.root is basically express router mounted at root '/' For Router mapping see Express routing

Examples

Return xml document using template

Directory structure

root
 |- templates
 |    `- user.ejs
 `- main.js

Template file

<!-- templates/user.ejs -->
<user><%= user.name %></user>

Route mapping

// main.js
const { Mimic } = require('@deu/mimic');

const users = [
    { name: 'user-one' },
    { name: 'user-two' }
];

Mimic.root.post('/users/:userId', (req, res) => {
    res.type('text/xml; charset=utf-8');
    const userId = parseInt(req.params.userId);
    res.render('user', {
        user: users[userId - 1]
    });
});

In above example requesting

  • POST /users/1 '<>...</>' will return user-one xml
  • POST /users/2 '<>...</>' will return user-two xml

Return respective response via request hashes

Each request uniquely generates hash from method, url and body. This hash can be used to respond with respective data;

const fruits = {
    "af7f992f-8489a5de": { name: 'apple' },
    "af7f992f-84a91dee": { name: 'banana' },
}

Mimic.root.post('/fruits', (req, res) => {
    const requestHash = res.locals.requestHash.combined;
    const data = fruits[requestHash];
    if (!data) {
        throw Error('Not found');
    }
    res.json(data);
});

In above example requesting

  • POST /fruits { "id": "a" } will generate hash "af7f992f-8489a5de"
  • POST /fruits { "id": "b" } will generate hash "af7f992f-84a91dee"

requestHash can be obtained via res.locals.requestHash object

{
    methodUrl: string;  // hash of method+url
    body: string;       // hash of body if exists or is empty
    combined: string;   // combiniation of hashes of methodUrl and body
}

Dependencies (10)

Dev Dependencies (12)

Package Sidebar

Install

npm i @deu/mimic

Weekly Downloads

9

Version

1.2.1

License

MIT

Unpacked Size

28.3 kB

Total Files

34

Last publish

Collaborators

  • dipeshy