Giter Site home page Giter Site logo

Handle thrown errors about msw HOT 7 CLOSED

mswjs avatar mswjs commented on April 27, 2024 1
Handle thrown errors

from msw.

Comments (7)

kentcdodds avatar kentcdodds commented on April 27, 2024 1

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.

kettanaito avatar kettanaito commented on April 27, 2024 1

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.

kettanaito avatar kettanaito commented on April 27, 2024

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.

kettanaito avatar kettanaito commented on April 27, 2024

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.

kentcdodds avatar kentcdodds commented on April 27, 2024

from msw.

kettanaito avatar kettanaito commented on April 27, 2024

@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.

kentcdodds avatar kentcdodds commented on April 27, 2024

from msw.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.