我在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


我需要对externalFunc进行存根测试(例如,它应返回7)。但是对internalFunc的引用是封闭的,我可以更改internalFunc,但是mymodule.internalFunc将使用旧的externalFunc。我尝试使用internalFunc,但是它也不起作用。我可以适当地保留我的职能吗?

最佳答案

您可以通过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());

09-25 19:26