LOGOMock Service Worker
  1. Api
  2. response

response

Response (res) is a function that composes a mocked response object.

Unlike the Response object in NodeJS, the res argument in Mock Service Worker is used to create and transform a mocked response. When called, it passes a created response from one response transformer to another, eventually resolving to a mocked response used by the Service Worker.

Mocked response

A call to the res() function creates a mocked response object. Each response transformer accepted by the res() function modifies that mocked response and passes it to the next response transformer, thus, creating a functional composition.

Properties

Property nameTypeDescription
statusnumberMocked response HTTP status code. (Default: 200)
statusTextstringHTTP status text of the current status code.
bodystringStringified body of the response.
headersHeadersMocked response HTTP headers.
delaynumberDelay duration (ms) before responding with a mocked response.

Example

Standard usage

1rest.get('/users', (req, res, ctx) => {
2 return res(
3 // This response transformer sets a custom status text on the response.
4 ctx.status(301),
5 // While this one appends a "Content-Type" response header.
6 ctx.set('Content-Type', 'application/json'),
7 )
8})

Raw usage

The res() call can accept a function that modifies and returns a created mocked response instance. It's recommended, however, to use standard response transformers for faster reference and reliability.

1rest.get('/users', (req, res) => {
2 return res((res) => {
3 res.status = 301
4 res.headers.set('Content-Type', 'application/json')
5 return res
6 })
7})

Custom response composition

Usually the res function is available as an argument of a request handler. However, in some cases (like building a custom response composition) it's useful to import the res function directly, outside of the request handler's scope.

You can do that by importing the response function from the msw package:

1// src/mocks/res.js
2import { response, context } from 'msw'
3
4export function res(...transformers) {
5 // A custom response composition chain that embeds
6 // a random realistic server response delay to each `res()` call.
7 return response(...transformers, context.delay())
8}

Such custom response composition can later be used when creating a mocked response in a request handler:

1// src/mocks/handlers.js
2import { setupWorker, rest } from 'msw'
3import { res } from './res'
4
5const worker = setupWorker(
6 rest.get('/user', (req, _, ctx) => {
7 // Notice how this response resolver is using a custom `res` function
8 // imported at the top of this module.
9 return res(ctx.json({ firstName: 'John', lastName: 'Maverick' }))
10 }),
11)
12
13worker.start()