npm package: @kaluza/mock-server
Description: A testing library that lets you spin up a real Express-based server during tests, to stub out and check the requests made to the systems your application interacts with.
Latest version: 0.12.1

# Node Mock Server

A testing library that lets you spin up a real Express-based server during tests, to stub out and check the requests made to the systems your application interacts with.

## Usage

An example of a minimal server setup:

```javascript
import mockserver from "@kaluza/mock-server";

// Create a server on port 8000
const server = mockserver(8000);

// Define some stubbed endpoints
const endpoint = server.get("/path", { status: "OK" });

// Start the server
await server.start();

// Run some code that makes a request to /path
await fetch("http://localhost:8000/path");

// Check the request
console.log(endpoint.calls.length === 1);

// Stop the server
await server.stop();
```

## Reference

### mockserver()

#### mockserver(port, [options])

Creates a new `MockServer` object with options. Only one path is registered: `/mockserver`.

Options object:

- `enableLogging` - logs out events such as endpoint registration, requests made. Defaults to **false**
- `useHttps` - creates a https server.
- `sslCertDir` - the directory the https server looks in for the self-signed certificate files `server.key` and `server.cert`.
- `middleware` - an array of [Express middleware](http://expressjs.com/en/guide/using-middleware.html) that will be applied to all routes in the server.

### MockServer

#### server.get(path, response, [responseStatus])

Registers a GET endpoint for the given path, returning an `EndpointRecord`.

- `path` is an [Express-compatible path](https://expressjs.com/en/4x/api.html#path-examples)
- `response` can be either an object, which will be returned as JSON, or an Express-compatible request handler. This lets you vary the response based on what's in the request. This can also be a number, which will be used as a response status code if the request should not have any content.
- `responseStatus` can optionally be provided to specify a response status code, this defaults to `200` if not set.

If two endpoints are created on the same path, the most recently created one will take precedence.

#### server.post(path, response, [responseStatus])

Registers a POST endpoint for the given path, returning an `EndpointRecord`.

- `path` is an [Express-compatible path](https://expressjs.com/en/4x/api.html#path-examples)
- `response` can be either an object, which will be returned as JSON, or an Express-compatible request handler. This lets you vary the response based on what's in the request. This can also be a number, which will be used as a response status code if the request should not have any content.
- `responseStatus` can optionally be provided to specify a response status code, this defaults to `200` if not set.

If two endpoints are created on the same path, the most recently created one will take precedence.

#### server.patch(path, response, [responseStatus])

Registers a PATCH endpoint for the given path, returning an `EndpointRecord`.

- `path` is an [Express-compatible path](https://expressjs.com/en/4x/api.html#path-examples)
- `response` can be either an object, which will be returned as JSON, or an Express-compatible request handler. This lets you vary the response based on what's in the request. This can also be a number, which will be used as a response status code if the request should not have any content.
- `responseStatus` can optionally be provided to specify a response status code, this defaults to `200` if not set.

If two endpoints are created on the same path, the most recently created one will take precedence.

#### server.reset()

Resets the server, creating a new express instance with no endpoints registered except the default `/mockserver`. Can be used to clean up if re-using a server between test suites.

#### server.stop([options])

Stops the server, preventing it from receiving any new connections.

Options object:

- `force` - whether to force stop the server, closing any connections that are still open. Defaults to `false`.

### EndpointRecord

Returned when an endpoint is registered. It lets you make assertions against calls to the server.

#### record.calls

An array of `CallRecord`s. These are objects with the following properties:

- `params` - the path params in the request
- `query` - the query params in the request
- `headers` - the request headers
- `body` - the request body, for calls that have one