Comments (6)
Now example works because the service worker lies in its parent directory, therefore can access its scope. In real use case the service worker (library) will be in node_modules
, and won't be able to access the application's scope.
from msw.
I am testing SW registration in CRA, and, obviously, it cannot reference SW file properly. One of the reasons is that the SW file is not served, but lies within node_modules/msw
directory.
One of the ways to overcome this may be introducing something like:
import { msw } from 'msw'
msw.start(() => {
return navigator.serviceWorker.register('/node_modules/msw/mockServiceWorker.js')
})
So that the registration action happens on the usage side, and provides the reference to the registered SW to the msw
to handle custom logic.I have no confirmation if this API would work, but I can give it a try.
from msw.
Delegating the registration point to the end developer doesn't solve the Service Worker serving issue. Runtime execution tries to look up the SW based on the base directory.
from msw.
ServiceWorker API supports importScripts
. Maybe it's reasonable to ask from a developer to create its own service worker, and then import the MSW script from node_modules
into it. This eliminates registration and scope issues, but makes getting started process slightly more complicated.
from msw.
Including a short analyzis of trying out a few ways to register a third-party service worker.
Register from within the library
Impossible, since mockServiceWorker.js
must be served from the application server.
Register from client, point to node_modules
// app/mocks.js
msw.start(navigator.serviceWorker.register('../node_modules/msw/mockServiceWorker.js'))
Impossible, as the registered SW must be served from the application server.
Using importScripts()
There is a catch with importScripts
, as it can only import:
- local served files (can't serve from
node_modules
) - external files via absolute urls (defiles the purpose of msw being an offline tool).
Importing MSW from some CDN with some basic version validation would theoretically work, but I dislike an idea to require internet connection to use an in-browser development tool. Sounds ridiculous.
from msw.
🎉 After a small proof of concept, I can state that using a simple CLI command like msw create
copies the Service Worker into the dir provided via CLI prompt, and can be registered properly on developer's side.
from msw.
Related Issues (20)
- Range header for 206 Partial Content is not respected for binary media requests HOT 5
- Failed to fetch after first interception HOT 7
- TypeScript error using `passthrough()` in GraphQL mock HOT 1
- Node 20 types not supported HOT 1
- 2.1.0 breaks browser usage HOT 15
- Drop request parsing from "onUnhandledRequest" HOT 2
- Avoid barrel file exports HOT 44
- Drop `headers-polyfill` HOT 3
- Consider bundling browser entrypoints HOT 7
- "request" in worker.events.on('response:mocked') is always null HOT 3
- Feature Request: Support Passthrough from msw Endpoint to msw Endpoint HOT 2
- MSW fails to start Mock because worker update() fails. HOT 1
- Mocking with react-query and graphql-request stopped working after upgrade to the LTS version of msw HOT 1
- MSW fails to recognize a registered handler HOT 1
- MSW mock does not work in jest test HOT 1
- Request in worker.events.on('response:mocked', {request} is always null HOT 5
- TextEncoder is not defined HOT 2
- Use "assertType" from Vitest for type testing HOT 2
- Type error when `graphql.query` infers type arguments from `TypedDocumentNode` HOT 8
- difficuly using axios patch or post call with payload using mock service worker 2.0.11 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.