A project to facilitate the use of Mountebank
- Mountebank - server used to run the mocked API
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.
- configuration file with required values
- folder with all stubs packages that will be used
- every folder directly inside
/stubs
must have anindex.ts
file that exports the stubs object - the export stubs object is as follow:
export const stubs = { [stubsName]: { predicates: ..., responses: ..., }, }
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
- file that load and configure all stubs packages
- file responsible to communicate with the Mountebank and configure the mock server
- On the command line inside the base folder of the repository, run:
npm i
to install everything
-
On the command line run:
npm run mb
-
On 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.
-
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:
/my-sample-project - project folder /src - my sample project source code /mocks - main folder used by the mock-server-api project. /package.json - Some configurations inside it are needed to start the mock-server project /tsconfig.json - Some configuration to run correctly with Typescript
- Inside
/mocks/stubs
there are some folders that can be discarded, they are there to be used as a sample;
- from any index.ts inside a folder in
/mock/stubs
export the stubs as:export const stubs
- This
stubs
const is a mapper of stubs as{ anyStubName: {} as StubData } as StubCollection
- For better understanding see the file
@types/index.ts
there is a lot of definitions includingStubData
andStubCollection
- This
- from any index.ts inside a folder in
/mock/stubs
export the apis as:export const apis
- A better example is implemented on the folder
/mocks/stubs/projects
there is use of urlParams, generated fields and query functions;
- A better example is implemented on the folder
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.ts
there 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
On the sample-project there is this folder withImport with this StubCollection
:
{ withImport: { predicates: [{ equals: { method: "GET", path: "/_demo/withImport" } }], responses: [ { run: "/withImport/fns.firstFn", behaviors: [{ wait: 1000, }], }, { run: "/withImport.innerFn", }, ], }, };
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"