Comments (4)
Regarding alternatives, when extending and defining a mock definition in a test, for example, you can use the following function that automatically generates the key.
Thanks for your reply!
The get*Key
methods could be used, but there a number of downsides to that:
- The method actually returns an array, where only the first element is the URL. So you would need to do something like
http.post(getListPetsKey(123)[0], async () => new HttpResponse('', { status: 500 }))
- You still have to repeat the HTTP verb (e.g.
http.post
). That's a possible source of errors, since the writer of the test has to manually make sure to pick the correct HTTP verb - even though orval actually knows the right verb. - It forces you to actually pick values for the path parameters, such as
getListPetsKey(paramA, paramB)
. That's inconsistent with the Orval-generated handlers, which just uses a placeholder such as:paramA
,:paramB
in the URL given to MSW.
Overall, I'm afraid this would not be a good developer experience.
So for now, my team will keep hard-coding URLs in tests. And I would be delighted if in the future, Orval will provide support for more flexible handler overrides.
from orval.
Thank you for made this issue.
Simulating HTTP errors in tests
Regarding alternatives, when extending and defining a mock definition in a test, for example, you can use the following function that automatically generates the key.
const key = getListPetsKey()
server.use(
http.post(key, async () => new HttpResponse('', { status: 500 }))
);
from orval.
Yes, this is an alternative method, but it is consistent and functional with the URL defined in OpenAPI, so please consider it as one method.
const key, _ = getListPetsKey()
from orval.
If you want to test different response types, you can use the generateEachHttpStatus
config option in output.mock
:
output: {
mock: {
type: "msw",
generateEachHttpStatus: true
}
}
With a specification that have two responses of a ListPets
endpoint, one 200 and one 500, the following mock is generated:
export const getListPetsMockHandler200 = (
overrideResponse?:
| Pets
| ((info: Parameters<Parameters<typeof http.get>[1]>[0]) => Pets),
) => {
return http.get('*/v:version/pets', async (info) => {
await delay(1000);
return new HttpResponse(
JSON.stringify(
overrideResponse !== undefined
? typeof overrideResponse === 'function'
? overrideResponse(info)
: overrideResponse
: getListPetsResponseMock200(),
),
{
status: 200,
headers: {
'Content-Type': 'application/json',
},
},
);
});
};
export const getListPetsMockHandler500 = (
overrideResponse?:
| Error
| ((info: Parameters<Parameters<typeof http.get>[1]>[0]) => Error),
) => {
return http.get('*/v:version/pets', async (info) => {
await delay(1000);
return new HttpResponse(
JSON.stringify(
overrideResponse !== undefined
? typeof overrideResponse === 'function'
? overrideResponse(info)
: overrideResponse
: getListPetsResponseMock500(),
),
{
status: 500,
headers: {
'Content-Type': 'application/json',
},
},
);
});
};
And you no longer need to overwrite the whole mock handler.
from orval.
Related Issues (20)
- Types in generated react-query schema have unstable order, causing noisy diffs HOT 1
- [Feature] Add ability to pass custom types for a string given a format hint
- Strange enum generation while using anyOf in schema HOT 2
- support `fetch` client HOT 3
- MSW: overrideResponse should allow async functions
- Non-requred requestBody results in TS error
- Faker types are incompatible with contract definition for number enums
- [Feature]Enable `faker.helpers.fromRegExp()` to be applied to msw mock from pattern keyword
- support faker for API schemas HOT 6
- Zod: type string format date should be "YYYY-MM-DD" HOT 7
- form-data array submission support HOT 6
- how to use react query with fetch API instead of axios HOT 3
- Referencing combined enums results in a duplicate schema name error HOT 4
- React Query: Add support to `useQueries`
- update package.json version when a client is generated
- [Feature] Allow to customize data type for dates HOT 1
- Array with no items key casues error (OpenAPI 3.1)
- Orval does not generate abort signal as third parameter in post request.
- [Feature] Generate strings from description fields
- React Query keys no longer exported? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from orval.