mswjs / source

Generate MSW request handlers from various sources (HAR files, OpenAPI documents, etc).
https://source.mswjs.io
134 stars 5 forks source link

Another way to condition a response #55

Open irsooti opened 2 months ago

irsooti commented 2 months ago

Description

In my common use cases, I don't have the ability to add a search param to do a conditional response.

Consider this silly scenario:

test('something', () => {

const user = getUser() 
expect(user).toBe(someCondition)
})

The function getUser contains a fetch request that retrieves users.

In the case of a happy path (200), the handlers created using fromOpenApi are fine. Now, let's repeat the same test using another type of response, for instance a 400 one.

According to the documentation, I should add a search parameter response to retrieve the response coupled with the status code, but as shown in the scenario, I can't just add the parameter because it's a detail I don't have control over (it could be something from a package, or a prebuild sdk with all the http calls inside).

Alternatives

Maybe it could be easier to consider some utility to control the status code of the msw handlers, I do not have a good idea to propose but conceptually is something like:

import { sourceryFnThatEditResponseCode } from '@msw/source'

test('something', () => {
// intercept '/the-endpoint-to-sent-in-400' and reply with 400 so retrieve the response based on 400 schema
sourceryFnThatEditResponseCode(...)

const user = getUser()

expect(user).toBe(someCondition)
}

wdyt?

kettanaito commented 1 month ago

Hi, @irsooti. Thanks, this is a great concern!

The search parameter approach is mainly meant for triggering different responses in the browser, and we are working on the improved browser support for fromOpenApi.

I think #57 is going to solve your problem though! You will be able to trim down the operations (and, hopefully, their responses) during the test setup.

irsooti commented 1 month ago

Hi, @irsooti. Thanks, this is a great concern!

The search parameter approach is mainly meant for triggering different responses in the browser, and we are working on the improved browser support for fromOpenApi.

I think #57 is going to solve your problem though! You will be able to trim down the operations (and, hopefully, their responses) during the test setup.

NICE! I'll wait it be documented and merged then.

We ended up to create a middleware to add the search params as temporary solution