Giter VIP home page Giter VIP logo

Comments (4)

fatso83 avatar fatso83 commented on June 2, 2024

Good repro! Thanks.

from sinon.

fatso83 avatar fatso83 commented on June 2, 2024

Do you want to take a stab at it? I am guessing it is not a very hard fix. We have good test coverage.

from sinon.

alewilliam789 avatar alewilliam789 commented on June 2, 2024

For this given replit if you print the source for the object whose getter is being replaced(using descriptor.get.toString()), the function has changed to the replacement. The console output you see is coming from line 246 in the function getFakeRestorers when the getter is executed to potentially set the field if forceAssignment is true.

Logically it needs to execute this way because restorers need to resolve the getter to be able to restore the original value you had in that function.

A good example is the test starting on line 1119 in sandbox-test where you have a variable that is being get and set by an object. Even if you try to delay the execution of the getter it will return you the most recent value of that variable, not the past value that needs to be restored. In the case that you just have simple output like a constant ('original' or 'fake') it's obviously different because you could get the descriptor for foo and then use the getter in that descriptor.

From my understanding getters should be pretty simple and should avoid side effects to begin with, so the solution in my opinion here should be to avoid side effects in your getters.

from sinon.

fatso83 avatar fatso83 commented on June 2, 2024

This is the code in question that is a bit too simple:
image

The simple direct access is the issue.
image

Since we only need the direct value when forcing use of accessors, we can check for that case. Fix upcoming.

from sinon.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.