Comments (1)
This is not a bug. To quote MDN:
Private properties get created by using a hash # prefix and cannot be legally referenced outside of the class. The privacy encapsulation of these class properties is enforced by JavaScript itself.
Sinon cannot do magic: if the JS engine itself prevents any other object from reaching the property, neither can we. As you can see from the below screenshot, there is no trace of the private field in the MyClass
prototype. If it does not have a property for us to manipulate, we cannot reference it, hence the quite correct "Cannot stub non-existent property #aPrivateMethod", as there is no such property.
![image](https://private-user-images.githubusercontent.com/618076/306933667-89c49cb4-6b52-4052-a72c-c4b96a0a37bd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4MDQ2MjcsIm5iZiI6MTcyMzgwNDMyNywicGF0aCI6Ii82MTgwNzYvMzA2OTMzNjY3LTg5YzQ5Y2I0LTZiNTItNDA1Mi1hNzJjLWM0Yjk2YTBhMzdiZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODE2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxNlQxMDMyMDdaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNzNhM2YxNDFhYWM0ZTdhZGJlNjVlZTIyODI4NDAzZTI5ZTczYTExNDJlOGYxYTg2MGVhNGQwMDQ0MDhiZDQ2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.ZemDJwycjwWij2iVhfDhUaoxGnV15hloO16FdOeImJ0)
And frankly, that is exactly how it should be. If your unit tests are tampering with privates you should rightly be prevented from accessing them 😄 If you don't want JS to enforce privacy, don't use the feature. You could then use a convention as in the old days of having __privateProperty
or something, if you really wish to.
from sinon.
Related Issues (20)
- Elaborate on "For the stubbing to work, the stubbed method cannot be destructured, neither in the module under test nor in the test." HOT 5
- Unable to install [email protected] HOT 6
- Remove unused/meaningless exports and modules from the codebase HOT 1
- Limit assertion log to a reasonable default HOT 1
- `returns` not override `callThrough` HOT 4
- `returns` clears fake's `callArgAt` HOT 5
- Discrepancy in stub construction methods HOT 4
- Feature Request: Add API support to stub a parent class constructor. HOT 4
- .rejects doesn't match documentation HOT 2
- SyntaxError: Unexpected token . -> assert(opts?.sinonXhrLib, "No XHR lib passed in"); HOT 1
- Documentation of callIds
- Calling replaceGetter invokes the original function HOT 4
- [Node v21.7.0] Impossible to stub `fetch` HOT 4
- Remove `const sandbox = sinon.createSandbox();` from examples unrelated to `sandbox`. HOT 1
- SinonFakeServer.respondWith not working with query params on 17.0.2 HOT 5
- sinon-test is broken when using sinon v17.0.2 HOT 2
- docs: overview of compatible nodejs versions HOT 4
- Mysterious undocumented v18 HOT 3
- Automate Release Process + Provenance 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 sinon.