Files
backstage/docs/architecture-decisions/adr007-use-msw-to-mock-service-requests.md
T
Ivan Shmidt 882728ae1d feat: the whole docs structure
Co-authored-by: Raghunandan Balachandran <meetraghu28@gmail.com>
Co-authored-by: Ben Lambert <ben@blam.sh>
2020-08-12 15:20:20 +02:00

1.6 KiB


id: adrs-adr007 title: ADR007: Use MSW to mock http requests sidebar_label: ADR007

Context

Network request mocking can be a total pain sometimes, in all different types of tests, unit tests to e2e tests always have their own implementation of mocking these requests. There's been traction in the outer community towards using this library to mock network requests by using an express style declaration for routes. react-testing-library suggests using this library instead of mocking fetch directly wether this be in a browser or in node.

https://github.com/mswjs/msw

Decision

Moving forward, we have decided that any fetch or XMLHTTPRequest that happens, should be mocked by using msw.

Here is an example:

import { setupWorker, rest } from 'msw';

const worker = setupWorker(
  rest.get('*/user/:userId', (req, res, ctx) => {
    return res(
      ctx.json({
        firstName: 'John',
        lastName: 'Maverick',
      }),
    );
  }),
);

// Start the Mock Service Worker
worker.start();

and in a more real life scenario, taken from CatalogClient.test.ts

beforeEach(() => {
  server.use(
    rest.get(`${mockApiOrigin}${mockBasePath}/entities`, (_, res, ctx) => {
      return res(ctx.json(defaultResponse));
    }),
  );
});

it('should entities from correct endpoint', async () => {
  const entities = await client.getEntities();
  expect(entities).toEqual(defaultResponse);
});

Consequences

  • A little more code to write
  • Gradually will replace the codebase with msw