hapi-mock
Hapi plugin for mocking endpoints.
Install
npm install hapi-mock
Purpose
This plugin provides a simple way to mock your HAPI endpoints.
It is experimental at this point of time.
Usage
Register the plugin with Hapi server like this:
const Hapi = require('@hapi/hapi');
const hapiMock = require('hapi-mock');
const server = new Hapi.Server({
port: 3000,
});
const mock = {
plugin: hapiMock,
options: {
baseDir: Path.join(__dirname, 'mocks'),
validate: async (request) => ({ isValid: true }),
},
};
const provision = async () => {
await server.register([mock]);
await server.start();
};
provision();
Your route configuration may look like this:
server.route({
method: 'GET',
path: '/example/{id}',
options: {
plugins: {
'hapi-mock': {
file: './cases',
},
},
},
handler: async (request, h) => {
}
});
The file
option refers to a JS module (e.g., cases.js
) containing your mock cases, e.g.,
module.exports = [{
condition: 'params.id == "4711"',
code: 418,
}, {
condition: 'query.id == "foo"',
type: 'application/json',
body: {
bar: true,
},
}, {
condition: 'headers["x-mock-case"] == 13',
code: 200,
type: 'text/plain',
body: 'case 13',
headers: {
'x-mock-foo': 'bar',
},
}];
condition
is an expression that may refer to HAPI's route parameters headers
, params
, query
, payload
, method
(lowercase), and path
. The usual operators are supported (==
, &&
, ||
, etc.).
Response parameters of a mock can be code
(default 200
), type
(default text/plain
), body
(default mocked!
), and headers
(default {}
).
And finally, you need to set the HTTP header x-hapi-mock: true
to a request to have a route use mocking rather than its real handler implementation.
You don't want to use this plug-in in production, of course.
Have fun.