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
mkdir -p mock/templates
cd mock && npm init -y
npm i @cxcloud/mimic
npx mimic --version
npx mimic --help
cat << EOF > main.js
const { Mimic } = require('@cxcloud/mimic');
Mimic.root.get('/greet', (req, res) => {
res.json({
data: 'hello world!'
})
});
EOF
DEBUG=mimic* npx mimic
mkdir subfolder
mv templates subfolder/
mv main.js subfolder/
DEBUG=mimic* npx mimic -d subfolder -p 3000
Usage
const { Mimic } = require('@cxcloud/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
<user><%= user.name %></user>
Route mapping
const { Mimic } = require('@cxcloud/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
}