https://github.com/codeceptjs/pactum-mock-server
https://github.com/codeceptjs/pactum-mock-server
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/codeceptjs/pactum-mock-server
- Owner: codeceptjs
- Created: 2024-11-05T09:45:41.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-11-05T09:47:34.000Z (8 months ago)
- Last Synced: 2025-01-26T05:15:56.357Z (5 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/@codeceptjs/pactum-mock-server
- Size: 4.88 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## MockServer
#### Table of Contents
- [config](#config)
- [Configuration](#configuration)
- [Properties](#properties)
- [MockServer](#mockserver)
- - [Examples](#examples)
- [Adding Interactions](#adding-interactions)
- [Request Matching](#request-matching)
- [Strong Match on Query Params](#strong-match-on-query-params)
- [Loose Match on Body](#loose-match-on-body)
- [Methods](#methods)
- [Parameters](#parameters)
- [startMockServer](#startmockserver)
- [Parameters](#parameters-1)
- [stopMockServer](#stopmockserver)
- [addInteractionToMockServer](#addinteractiontomockserver)
- [Parameters](#parameters-2)### config
### Configuration
This helper should be configured in codecept.conf.(js|ts)
Type: [object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
#### Properties
- `port` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** Mock server port
- `host` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** Mock server host
- `httpsOpts` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** key & cert values are the paths to .key and .crt files### MockServer
MockServer powered by [pactum](https://www.npmjs.com/package/pactum)
The MockServer Helper in CodeceptJS empowers you to mock any server or service via HTTP or HTTPS, making it an excellent tool for simulating REST endpoints and other HTTP-based APIs.
##### Examples
You can seamlessly integrate MockServer with other helpers like REST or Playwright. Here's a configuration example inside the `codecept.conf.js` file:
```javascript
{
helpers: {
REST: {...},
MockServer: {
require: '@codeceptjs/pactum-mock-server',
// default mock server config
port: 9393,
host: '0.0.0.0',
httpsOpts: {
key: '',
cert: '',
},
},
}
}
```##### Adding Interactions
Interactions add behavior to the mock server. Use the `I.addInteractionToMockServer()` method to include interactions. It takes an interaction object as an argument, containing request and response details.
```javascript
I.addInteractionToMockServer({
request: {
method: 'GET',
path: '/api/hello'
},
response: {
status: 200,
body: {
'say': 'hello to mock server'
}
}
});
```##### Request Matching
When a real request is sent to the mock server, it matches the received request with the interactions. If a match is found, it returns the specified response; otherwise, a 404 status code is returned.
- Strong match on HTTP Method, Path, Query Params & JSON body.
- Loose match on Headers.###### Strong Match on Query Params
You can send different responses based on query parameters:
```javascript
I.addInteractionToMockServer({
request: {
method: 'GET',
path: '/api/users',
queryParams: {
id: 1
}
},
response: {
status: 200,
body: 'user 1'
}
});I.addInteractionToMockServer({
request: {
method: 'GET',
path: '/api/users',
queryParams: {
id: 2
}
},
response: {
status: 200,
body: 'user 2'
}
});
```- GET to `/api/users?id=1` will return 'user 1'.
- GET to `/api/users?id=2` will return 'user 2'.
- For all other requests, it returns a 404 status code.###### Loose Match on Body
When `strict` is set to false, it performs a loose match on query params and response body:
```javascript
I.addInteractionToMockServer({
strict: false,
request: {
method: 'POST',
path: '/api/users',
body: {
name: 'john'
}
},
response: {
status: 200
}
});
```- POST to `/api/users` with the body containing `name` as 'john' will return a 200 status code.
- POST to `/api/users` without the `name` property in the body will return a 404 status code.Happy testing with MockServer in CodeceptJS! 🚀
### Methods
#### Parameters
- `passedConfig`
#### startMockServer
Start the mock server
##### Parameters
- `port` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** start the mock server with given port
Returns **any** void
#### stopMockServer
Stop the mock server
Returns **any** void
#### addInteractionToMockServer
An interaction adds behavior to the mock server
```js
I.addInteractionToMockServer({
request: {
method: 'GET',
path: '/api/hello'
},
response: {
status: 200,
body: {
'say': 'hello to mock server'
}
}
});
``````js
// with query params
I.addInteractionToMockServer({
request: {
method: 'GET',
path: '/api/hello',
queryParams: {
id: 2
}
},
response: {
status: 200,
body: {
'say': 'hello to mock server'
}
}
});
```##### Parameters
- `interaction` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** add behavior to the mock server
Returns **any** void