mock-server-api
v0.10.4
Published
A project to facilitate the use of Mountebank
Readme
mock-server-api
A project to facilitate the use of Mountebank
The key points for this project are:
- Mountebank - server used to run the mocked API
Configurations
To use this project the easiest way is to use the /sample-project as it already contains a package.json configured and the structure to initiate the mocked api.
src/mconfig.ts
- configuration file with required values
src/stubs
- folder with all stubs packages that will be used
- every folder directly inside
/stubsmust have anindex.tsfile that exports the stubs object - the export stubs object is as follow:
it is an object that map each property or 'stubName' to it's stub object, the stub has two properties: predicates and responses.
As you can see the predicates in https://www.mbtest.org/docs/api/predicates or http://localhost:2525/docs/api/predicates if the mountebank is running.
And the responses in https://www.mbtest.org/docs/api/stubs or http://localhost:2525/docs/api/stubs
src/stubs/index.ts
- file that load and configure all stubs packages
src/index.ts
- file responsible to communicate with the Mountebank and configure the mock server
Required configurations
- On the command line inside the base folder of the repository, run:
npm ito install everything
Run steps using
On the command line run:
npm run mbOn an new command line run:
npm run mock- Every time that its necessary to update the mock server it is just this last command again.
Integrating with another project:
An project can copy all the sample project inside of it and make it available to others as unique project, with only a few configuration options.
Structure example:
The current mock-server project
- Inside
/mocks/stubsthere are some folders that can be discarded, they are there to be used as a sample;
There is two methods of generating the mock:
- from any index.ts inside a folder in
/mock/stubsexport the stubs as:export const stubs- This
stubsconst is a mapper of stubs as{ anyStubName: {} as StubData } as StubCollection - For better understanding see the file
@types/index.tsthere is a lot of definitions includingStubDataandStubCollection
- This
- from any index.ts inside a folder in
/mock/stubsexport the apis as:export const apis- A better example is implemented on the folder
/mocks/stubs/projectsthere is use of urlParams, generated fields and query functions;
- A better example is implemented on the folder
Query filters options (using list-total model api)
There are some options for query filters they are:
"CONTAINS" : the query param name must be equal to the param inside the object, the query param value must be inside the object param value
any other string: the same as "CONTAINS" but it will search for equality;
array [param, type]: the 'param' is the param name in the object, the 'type' follow the above rules
(funtion) : the funcion will have this structure: (list: any[], value: any, config: ConfigInjection) => any[];
- list: array of values that would be returned without this filter,
- value: the value of the query param;
- config: object containing all the values passed by Mountebank
queryPriority: set the priority of an query, if the priority is greater than 9 that query will be executed after extract the list length, default value is 5.
list-total/utils.tsthere are 2 functions that could be used to add query function:sort= used to sort the result list,offset= used for pagination, a sample of use is on/mocks/stubs/projects
CREATE RESPONSES FUNCTION PATH:
On the sample-project there is this folder withImport with this StubCollection:
The main point is to use an exported function inside the stub response, it will only need to pass the path to the function on the following format:
"/pathToFolder/InsideStubs/Location/FileName.functionExported"
0.9.0 - Direct function declaration
Allow function declaration direct on injection response or behaviors decorator;
A sample available on
"/sample-project/src/stubs/auth/index.ts"
const onLogout = (config: ConfigInjection) => {
...
...
logout: {
stub: {
predicates: [{ matches: { method: "GET", path: "/logout" } }],
responses: [
{
is: {
statusCode: 302,
headers: {
"Set-Cookie": "APP_SESSION_ID=deleted; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT",
},
},
behaviors: [{ decorate: onLogout }],
},
],
},
},
...0.10.0
- Add select attribute name to return list result from API
- sample-project:
- clear cache when using import functions
- api list with selected return attribute
0.10.1
Fix api list-total query
