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
}