sinonjs/sinon

Spy's thisValue not pointing to instance when spying constructor

Open

#1,683 opened on 2018年2月9日

GitHub で見る
 (11 comments) (0 reactions) (0 assignees)JavaScript (9,548 stars) (764 forks)batch import
BugDifficulty: MediumHelp wantedRegressionhacktoberfestpinned

説明

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()')

コントリビューターガイド

Spy's thisValue not pointing to instance when spying constructor · sinonjs/sinon#1683 | Good First Issue