Comments (7)
I have some utilities I use in my resolvers. For these utilities it's just easier to throw an error (because we don't have access to the context):
throw new Error('username must be provided')
I realize that I'm missing the status code for this case and could probably make something work for that.
Also, there are sometimes regular runtime errors for things I haven't considered and it would be nice if the whole app didn't just crash when I hit those.
from msw.
Released in 0.12.0
.
Please refer to the guide of mocking server errors in case your goal is to mock an error. I believe that introduced error handling is primarily useful for handling unintended exceptions inside request handlers, so they don't crash the application they are being used in. Similar to how you compose an error response in Express, I'd recommend to do so using the library's res()
function.
from msw.
Makes sense. I'd treat such errors as 500, but without the X-Powered-By: "msw"
header set to distinguish between mocked 500 response and library's error.
@kentcdodds, could you please describe what use case led to an error? That way I will make sure I account for all scenarios. Thanks.
from msw.
That's reasonable, thanks for sharing.
I find the safest way of error handling in this case to be the mockServiceWorker.js
itself. That brings up the question of how to ensure that the installed library operates with the last Service Worker file (#81). Since the Service Worker is served by the application, it's possible to have an old file served, while the client-side code expects a different behavior from it.
I'm going to tackle Service Worker's integrity firsts, and introduce internal error handling as the next step. Meanwhile, I suppose you can handle such errors by doing this:
const { start } = composeMocks(/* your request handlers */)
start.catch(console.error)
This will not take into account any exceptions raised by
mockServiceWorker.js
, but rather cover the errors in the client-side library.
from msw.
from msw.
@kentcdodds, that's correct. The call stack overview looks as follows:
SW -- respondWith(pending Promise, (1)) -> match req on client side -> get response (2) -> resolve Promise
The error occurring in the resolver is inside the call stack of the Service Worker's respondWith
(1), if it's handled on the Service Worker side it would act as the top-level safeguard for all errors within that stack. Is this a wrong presumption? 🤔
from msw.
from msw.
Related Issues (20)
- Mock a request that contains both query and path parameters
- TypeError: confirm is not a function HOT 7
- Failing to intercept an Axios request: Node 20.11 + Vitest 1.3.1 + MSW 2.2.1
- v2.2.2 does not intercept request in browser mode (CORS error) but v1.3.1 does HOT 3
- Infering the `boundary` callback arguments HOT 7
- support custom fetch option HOT 7
- support selecting interceptors HOT 1
- Set-Cookie responses containing commas are not handled correctly HOT 1
- HttpResponse.json() throwing TypeError: Right-hand side of 'instanceof' is not an object. HOT 1
- Request with FormData body makes Jest hang forever HOT 6
- TypeError: Right-hand side of 'instanceof' is not an object HOT 4
- Cannot read properties of undefined (reading 'url') HOT 5
- Mocked data getting empty string HOT 8
- "InvalidStateError: The object is in invalid state" when mocking rest api
- Unable to use msw/node for testing solid-js due to `resolve.conditions` set to `browser` HOT 5
- drop CommonJS support HOT 2
- quiet: true should supress RESPONSE LISTENER logs HOT 4
- Narrowing the response body type in `HttpResponse.json` HOT 16
- Error: No known conditions for "./browser" specifier in "msw" package HOT 2
- "Cannot read properties of undefined (reading 'get')" when using generators/async generators as resolvers HOT 2
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 msw.