打字稿中闭包的存根函数

Stubbing functions which are in closure in TypeScript

我正在用 TypeScript 编写代码。这是我的代码片段:

module mymodule {

    export function internalFunc() {
        return 1;
    }

    export function externalFunc() {
        return internalFunc() + 1;
    }
} 

哪个会编译成这个JS:

var mymodule;
(function (mymodule) {
    function internalFunc() {
        return 1;
    }
    mymodule.internalFunc = internalFunc;
    function externalFunc() {
        return internalFunc() + 1;
    }
    mymodule.externalFunc = externalFunc;
})(mymodule || (mymodule = {}));
//# sourceMappingURL=file1.js.map

我需要用存根 internalFunc 测试 externalFunc(例如,它应该 return 7)。但是对 internalFunc 的引用处于关闭状态,我可以更改 mymodule.internalFunc,但是 externalFunc 将使用旧的 internalFunc。我尝试使用 sinon.stub(mymodule, 'internalFunc', function() {return 7}),但它也不起作用。我可以正确存根我的函数吗?

您可以通过 mymodule.internalFunc() + 1 而不是 internalFunc() + 1 引用它:

module mymodule {
    export function internalFunc() {
        return 1;
    }

    export function externalFunc() {
        return mymodule.internalFunc() + 1;
    }
}

mymodule.internalFunc = () => 7;
console.log(mymodule.externalFunc()); // 8

现在你应该可以按照你描述的方式使用它了(虽然我对sinon不熟悉):

sinon.stub(mymodule, 'internalFunc', () => 7);
assertEquals(8, mymodule.externalFunc());