'this' не определено после использования sinon.stub () для заглушки - PullRequest
0 голосов
/ 17 апреля 2020

Описание проблемы

У меня есть класс, который расширяет другой класс, и когда я пытаюсь заглушить унаследованный метод в моем тестовом коде и запускаю функцию init для тестируемого класса, ' это "не определено. Заглушка sinon случайно не связывается с 'this'?

Код класса:

    import Class2 from 'module/Class2';

    export const Class1 = Class2.extend({
        init: function (options) {
           Class1.inherited('init', this, arguments);
           this.item = {};
        }
    })

Код модульного теста:

    import tap from 'tap';
    import sinon from 'sinon';
    const proxyquire = require('proxyquire').noCallThru();

    const class1Stub = sinon.stub().callsFake(function () {
         return {
             inherited: sinon.stub() // I believe this is where 'this' becomes undefined
         }
    });

    const Class1Mock = proxyquire('./Class1', {
        'module/Class2': { extend: class1Stub },
    });

    tap.test('Class1', t => {
        const init = class1Stub.getCall(0).args[0].init;
        init(); // Error generated here
        t.done();
    });

Я попытался использовать приведенный ниже пример функции returnsThis sinon, но, похоже, это не сработало.

    const class1Stub = sinon.stub().callsFake(function () {
         return {
             inherited: sinon.stub() // I believe this is where 'this' becomes undefined
         }
    }).returnsThis();

Произошла ошибка

не может установить свойство не определено

...