Comments (4)
Hi,
unfortunately not, because JavaScript copies primitives like numbers by value. This means, that an assignment creates a copy of the original value. Changing the original value won't change the copy.
For instance:
var a = 2;
var b = a; // assigns the value 2, not the reference a
a = 3;
console.log(b); // 2
Objects (and arrays) on the other hand are copied by reference, so:
var obj1 = {
foo: "foo"
};
var obj2 = obj1; // assigns the reference of obj1 to obj2
obj1.foo = "bar";
console.log(obj2.foo); // "bar"
from rewire.
Unfortunatly there is no operator to change this behaviour. I think they made this to keep JavaScript simple for beginners. But actually most of the time it's no real problem, it's only annoying if you want to copy an object.
from rewire.
Right, I tried to simplify the example too much making it different from my original use case and thus introduced the passed by value issue without noticing.
This is closer to what I would like to do, maybe this is possible:
var foo = require('./foo');
var bar = require('./bar');
var providers = {
foo: foo,
bar: bar
}
module.exports = {
run: function (provider) {
return providers[provider];
}
};
So I have an object providers
that has references to two modules. I want to dynamically call one of these modules depending on the params passed into my module.
So in my test I would like to rewire foo and get this line return providers[provider]
to return the fake version.
thanks
from rewire.
If you just want to rewire providers.foo
you could do:
var subject = rewire('../../services/foo');
subject.__set__("providers.foo", fooMock);
or of course rewire the whole providers
-object.
Since the code is executed when calling rewire()
, the reference of the original foo-module is copied instantly to the providers
-object. So rewiring the foo-module won't change the copied reference. I don't see any other way than manually rewiring every reference in the module.
You could also take a look at injectr. There you can provide mocks for certain require()-calls. 😄
from rewire.
Related Issues (20)
- global variable is not available in the module HOT 8
- Injected mocks add functionality rather than replace it HOT 1
- rewiring any function executes every line that isn't in any function
- Rewired function is not instanceof Function in Jest context HOT 1
- Rewire doesn't work with typescript HOT 3
- Rewire does not seem to work with flow HOT 1
- mocking fs when using rewire
- Rewire dosn't mock function
- A behaviour that could have HOT 1
- Update the vulnerable packages HOT 6
- type error when rewire'ing const HOT 4
- Vulnerable dependancy eslint 7.32.0 HOT 1
- Vulnerability in dependency eslint HOT 2
- Feature request: ESM support
- Special handling for process.env? HOT 2
- Rewire on node module with shebang doesn't work.
- Eslint need to be updated to at least version 8.15.0 HOT 1
- Rewire is great, but it doesn't work for SonarQube HOT 1
- unpexpected : due to type definition in TS HOT 1
- nconf values are undefined when a module is rewire
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 rewire.