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: A dynamic import callback was invoked without --experimental-vm-modules" in Jest HOT 8
- Proposal: Mock RSC payload
- socket `connect` event is not emitted when sending multiple requests concurrently with a http agent `keepAlive: true` HOT 1
- XHR Upload events are not being triggered HOT 1
- Module not found: Error: Can't resolve 'graphql' HOT 1
- Node.js (Undici) fetch doesn't follow redirects when mocked with MSW HOT 2
- Remix redirect headers are broken (`x-remix-redirect`) HOT 11
- msw seems to depend on vulnerable versions of `path-to-regexp` HOT 13
- Mocked response cookie persists after sending `max-age=0` HOT 7
- TypeError: myFile?.slice(...).arrayBuffer is not a function HOT 24
- Always 404 / Not Intercepted on homepage set CRA HOT 5
- TypeError: Cannot assign to read only property 'Request' of object '[object Window]' HOT 11
- CVE-2024-45296: path-to-regexp update needed HOT 2
- All request headers are missing (remix on lambda) HOT 9
- TypeError: Cannot assign to read only property 'Headers' of object '[object Object]' HOT 11
- TypeError: Cannot redefine property: Request at Function.defineProperty (<anonymous>) HOT 4
- Memory Leak while running e2e test. HOT 2
- TypeError: Cannot set property headers of #<_Request> which has only a getter HOT 9
- Bug: Module not found: Can't resolve '_http_common' in Next.js HOT 5
- Uncaught TypeError: crypto.randomUUID is not a function at mockServiceWorker.js:114 HOT 1
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.