jest icon indicating copy to clipboard operation
jest copied to clipboard

spyOn getter only works for static getters and not for instance getters

Open stefaneidelloth opened this issue 4 years ago • 6 comments

🐛 Bug Report

If I try to spy on a getter with

spyOn(instance,'foo','get').and.returnValue(false);

I get the error

 <spyOn> : foo property does not exist
    Usage: spyOn(<object>, <methodName>)

      22 |     var instance = new MyClass();
      23 | 
    > 24 |     spyOn(instance,'foo','get').and.returnValue(false);
         |     ^
      25 |     expect(instance.foo).toBe(false);
      26 | 
      27 | });

      at SpyRegistry._spyOnProperty (node_modules/jest-jasmine2/build/jasmine/spyRegistry.js:191:15)
      at Object.<anonymous> (test/tools/wizard/demo.test.js:24:5)

To Reproduce

Here are two examples, one for a static property and one for an instance property. The first test works. The second fails.

it('static getter', ()=>{

    class MyClass {
        static get foo(){
            return true;
        }
    }

    spyOn(MyClass,'foo','get').and.returnValue(false);
    expect(MyClass.foo).toBe(false);

});

it('non-static getter', ()=>{

    class MyClass {
        get foo(){
            return true;
        }
    }

    var instance = new MyClass();

    spyOn(instance,'foo','get').and.returnValue(false);
    expect(instance.foo).toBe(false);

});

My babel-setting inside package.json are:

"babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ],
      "@babel/preset-react"
    ]
  },

Expected behavior

The instance property "foo" should be found and the second test should work, too.

envinfo


npx: installed 1 in 2.149s

  System:
    OS: Windows 10 10.0.17763
    CPU: (8) x64 Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
  Binaries:
    Node: 12.13.1 - C:\Program Files\nodejs\node.EXE
    Yarn: 1.22.0 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
    npm: 6.12.1 - C:\Program Files\nodejs\npm.CMD
  npmPackages:
    jest: 25.1.0 => 25.1.0

related

https://github.com/facebook/jest/issues/8137 https://github.com/facebook/jest/issues/5746 https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname-accesstype

Workaround

Inststead of

spyOn(instance,'foo','get').and.returnValue(false);

I am able to use

Object.defineProperty(instance, 'foo', { get(){ return false; } });

stefaneidelloth avatar Mar 17 '20 13:03 stefaneidelloth

I have this issue as well. The workaround works but it would nice if spyOn also worked for instance properties.

imhotep avatar Apr 02 '20 22:04 imhotep

dang! it's at least nice when the last comment is less than 2 weeks ago. thanks for the workaround. seems a bit janky though!

omgoshjosh avatar Apr 15 '20 21:04 omgoshjosh

any progress on it? This workaround seems not to work for me

adnan-razzaq avatar Dec 04 '20 01:12 adnan-razzaq

Quite unpleasant bug when working with Mobx and TypeScript. I'm currently working around this by setting the property directly and ignoring the typescript error for now:

// @ts-ignore
instance.foo = false;

lennerd avatar Dec 05 '20 23:12 lennerd

This is still broken in [email protected], though my issue is with automocked classes not having any getter/setter mocks at all.

opened a new issue https://github.com/facebook/jest/issues/13140

staplespeter avatar Aug 06 '22 14:08 staplespeter

Should be fixed in 29.1.0. PR https://github.com/facebook/jest/pull/13145

pahuta avatar Oct 06 '22 05:10 pahuta

This issue is stale because it has been open for 1 year with no activity. Remove stale label or comment or this will be closed in 30 days.

github-actions[bot] avatar Oct 06 '23 06:10 github-actions[bot]

This issue was closed because it has been stalled for 30 days with no activity. Please open a new issue if the issue is still relevant, linking to this one.

github-actions[bot] avatar Nov 05 '23 07:11 github-actions[bot]

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. Please note this issue tracker is not a help forum. We recommend using StackOverflow or our discord channel for questions.

github-actions[bot] avatar Dec 06 '23 00:12 github-actions[bot]