在TypeScript中关闭函数的闭包函数

时间:2015-08-13 10:43:14

标签: javascript unit-testing typescript mocha sinon

我在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来测试internalFunc(例如,它应该返回7)。但是对internalFunc的引用已关闭,我可以更改mymodule.internalFunc,但externalFunc将使用旧的internalFunc。我尝试使用sinon.stub(mymodule, 'internalFunc', function() {return 7}),但它也没有用。我可以正确地删除我的功能吗?

1 个答案:

答案 0 :(得分:0)

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