orval icon indicating copy to clipboard operation
orval copied to clipboard

MSW: overrideResponse can be a function

Open purefun opened this issue 1 year ago • 2 comments

Currently, a msw mock handler would be:

import { HttpResponse, HttpResponseResolver, delay, http } from 'msw'

export const getSomethingMockHandler = (overrideResponse?: SomethingResponse) => {
  return http.get('/something', async () => {
    await delay(1000);
    return new HttpResponse(JSON.stringify(overrideResponse ? overrideResponse : getSomethingResponseMock()),
      {
        status: 200,
        headers: {
          'Content-Type': 'application/json',
        }
      }
    )
  })
}

But it would be nice if overrideResponse is a function. So that we can produce response programmatically.

export const getSomethingMockHandler = (overrideResponse?: (resolver: HttpResponseResolver) => SomethingResponse | Promise<SomethingResponse>) => {
  return http.get('/something', async (resolver) => {
    await delay(1000);
    const response = overrideResponse ? overrideResponse(resolver) : getSomethingResponseMock()
    return new HttpResponse(JSON.stringify(response)),
      {
        status: 200,
        headers: {
          'Content-Type': 'application/json',
        }
      }
    )
  })
}

purefun avatar Apr 25 '24 03:04 purefun

@soartec-lab is this the same issue you just fixed in 6.28.0? https://github.com/anymaniax/orval/issues/1293

melloware avatar Apr 25 '24 12:04 melloware

@melloware No, this is separate from #1293. I'll add an enhancement label to this.

soartec-lab avatar Apr 30 '24 12:04 soartec-lab