Comments (4)
Another related effect of this is that MSW doesn't intercept correctly when using named ES module exports from the relevant default Node modules.
Example:
// Not intercepted:
import { get } from 'node:https';
get('https://example.com', (response) => { /* ... */ });
// Intercepted as expected:
import https from 'node:https';
https.get('https://example.com', (response) => { /* ... */ });
from msw.
Hi, @mickdekkers. Thanks for reporting this!
Alas, this is a technical limitation, and to my best knowledge we cannot solve it. When you import something as a wildcard import * as X from Y
, JavaScript creates a special object called Y
in that module's scope. The properties of that object are readonly and their reassignment seems to be protected even on runtime.
This code throws:
import * as http from 'http'
http.get = () => {}
This code doesn't:
import http from 'http'
http.get = () => {}
The same goes for named exports mentioned by @aduth. Reassigning the named export is not possible because it's a local variable created in that module's scope upon importing. You cannot reassign those:
import { get } from 'http'
get = () => {} // Error
I don't think it's possible to support these two use cases. If it's the code you control, I recommend importing the native Node.js modules using the default export. If it's the code you don't own, neither of us can do much about it.
from msw.
For the third-party code, I believe import * as http from 'http'
is an incorrect way to import built-in Node.js modules. You can consider raising a pull request to that library's repo and see if they would agree on that.
from msw.
I wonder if the new Node module loader hooks could be an option here to override how the HTTP modules are resolved?
https://nodejs.org/api/module.html#hooks
Granted:
- It may add some complexity for how hooks are registered
- May be additional overhead to manage both ESM and CommonJS
- Hooks are “release candidate” but still not fully stable
from msw.
Related Issues (20)
- 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 5
- "Cannot read properties of undefined (reading 'get')" when using generators/async generators as resolvers HOT 2
- `TypeError: crypto.randomUUID is not a function` with msw 2.2.12 HOT 3
- When running Cypress tests in Electron, MSW activation occurs after test completion, causing tests to fail
- Chrome unregisters MSW after 5 mins of inactivity / idle HOT 13
- First-class Server-Sent Events (SSE) API
- The currently registered Service Worker has been generated by a different version of MSW (undefined) HOT 1
- disable prettier as well HOT 1
- Issue with response resolver types after recent upgrade HOT 2
- "TypeError: response.body.getReader is not a function" for HTTPResponse of JSON type HOT 5
- Preserve the original request URL in "onUnhandledRequest" warnings HOT 3
- The cookies object recevied in the handlers varies depending on the placement of the handler within the `setupServer` function. HOT 5
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.