sinonjs/sinon

Spy's thisValue not pointing to instance when spying constructor

Open

#1683 aperta il 9 feb 2018

Vedi su GitHub
 (11 commenti) (0 reazioni) (0 assegnatari)JavaScript (764 fork)batch import
BugDifficulty: MediumHelp wantedRegressionhacktoberfestpinned

Metriche repository

Star
 (9548 star)
Metriche merge PR
 (Merge medio 6g 16h) (15 PR mergiate in 30 g)

Descrizione

This snippet works fine with Sinon 2.0.0 but fails with Sinon 4.2.2:

it('returns correct thisValue', function() {
    window.SomeClass = function() {
        this.counter = 0;
        this.inc = function() {
            this.counter++;
        };
        this.getCounter = function() {
            return this.counter;
        };
    };

    var spy = sinon.spy(window, 'SomeClass');
    var some = new window.SomeClass();
    some.inc();

    expect(spy.thisValues[0].counter).toEqual(1);
    expect(spy.thisValues[0].getCounter()).toEqual(1);
    some.inc();
    expect(spy.thisValues[0].counter).toEqual(2);
    expect(spy.thisValues[0].getCounter()).toEqual(2);
});

It looks like the thisValues[0] object is a proxy and does not refer to the actual instance of some.

This is the error with Sinon 4.2.2:

Expected undefined to equal 1
TypeError: undefined is not a function (evaluating 'spy.thisValues[0].getCounter()')

Guida contributor