Wiremock Client
npm install mock-cmdrWiremock client for Node JS which promotes separation of dynamic mocking
commands from test code logic.
```
npm install mock-cmdr
https://mock-cmdr.js.org/
Mock Commander can be simply used as a Wiremock rest API client:
`javascript`
const mockCmdr = require('mock-cmdr');
mockCmdr.init({ baseUrl: 'http://wiremock' });
mockCmdr.createMapping({
request: {
method: 'GET',
urlPath: '/user/1',
},
response: {
jsonBody: {
id: 1
}
},
});
However, Mock Commander's real utility comes from defining templated Wiremock
commands. If the mapping definintion above is moved into
${__dirname}/mock/stub/get-user-by-id.js then the same create mapping call
can be made by:
`javascript`
const user = { id: 1 };
await mockCmdr.stub.getUserById(user);
Commands are loaded by providing the cmdDir option to mockCmdr.init():
`javascript`
const path = require('path');
const mockCmdr = require('mock-cmdr');
mockCmdr.init({
baseUrl: wiremockBaseUrl,
cmdDir: path.resolve(__dirname, 'mock'),
});
See the [Mock Commander Cucumber Test Suite][] for a full example demonstrating
how to define and use templated Wiremock commands with Cucumber.
The following example demonstrates the layout of a command dir:
``
[cmdDir]
|- stub
| |- user
| |- create.js
| |- get-by-id.js
|
|- find
|- user
|- create-by-email.js
The resulting commands after calling mockCmdr.init({ cmdDir }) will be:
`javascript`
mockCmdr.stub.user.create()
mockCmdr.stub.user.getById()
mockCmdr.find.user.createByEmail()
`javascript/user/${user.id}
/**
* @returns {WiremockStubMapping}
*/
module.exports = function(user) {
return {
request: {
method: 'GET',
urlPath: ,`
},
response: {
jsonBody: user.toApiModel(),
},
};
};
`javascript/user/${user.id}
/**
* @returns {WiremockRequestCriteria}
*/
module.exports = function(user) {
return {
method: 'GET',
urlPath: ,`
};
};
#### .init(options)
Initialize the Mock Commander session. If cmdDir is specified thenloadCmds() will also be called.
options:
* baseUrl (string) - the mock server base URL, eg: http://wiremock:8080.
* cmdDir (string) - the dir to load commands from.
#### .defineCmd(command)
Define a templated mocking command that will be available via
mockCmdr.{type}.{path} or mockCmdr.{type}.{name}. When the command iscreateMapping()
invoked then or findRequests() will be called with the
output of the command's template function.
command:
* type (string) - "stub" or "find".mockCmdr.stub
* path (string[]) - the path the command will be available at within
or mockCmdr.find.{ path: [ name ] }
* name (string) - shorthand for
* template (function) - A function that returns either a "find requests" criteria or a
"stub mapping" definition.
#### .loadCmds(dir)
Load all "find" and "stub" mocking commands by searching recursively
within baseDir.
The discovered commands will be passed to defineCmd() using the camel
cased file names as the command path. Modules found within a "find"
directory are treated as "find" commands and modules found within a
"stub" directory are treated as "stub" commands. Modules not within a
"find" or "stub" directory are ignored.
Any intermediate directories other than "find" and "stub" will be
treated as namespaces. Namespaces can be arbitrarily deep and are also
camel cased. The "find" and "stub" dirs are excluded from the namespace
and need not appear at the top level allowing related commands to be
grouped appropriately.
#### .createMapping(mapping)
async
Call the [Wiremock Stub Mapping API][].
#### .findRequests(criteria)
async
Call the [Wiremock Find Requests API][].
#### .stub
Access to "stub" commands registered via mockCmdr.defineCmd().
#### .find
Access to "find" commands registered via mockCmdr.defineCmd()`.
#### .cleanUp()
async
Remove stub mappings from the Wiremock server that have been created by the
current session.
Legal
-----
Copyright 2020 Nathan Jones. Licensed under the Apache License, Version 2.0.
[Mock Commander Cucumber Test Suite]: https://github.com/ncjones/mock-cmdr/tree/master/features/
[Wiremock Stub Mapping API]: http://wiremock.org/docs/api/#tag/Stub-Mappings/paths/~1__admin~1mappings/post
[Wiremock Find Requests API]: http://wiremock.org/docs/api/#tag/Requests/paths/~1__admin~1requests~1find/post