【问题标题】:Stubbing functions which are in closure in TypeScript在 TypeScript 中关闭的存根函数
【发布时间】:2015-11-06 06:54:40
【问题描述】:

我正在使用 TypeScript 编写代码。这是我的代码 sn-p:

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

【问题讨论】:

  • 此时您应该测试的“单元”可能是您的整个模块。您不需要在单个功能级别进行单元测试。
  • "我可以更改 mymodule.internalFunc,但 externalFunc 将使用旧的 internalFunc" - 这听起来不正确。您能否详细说明您在测试中是如何尝试的?

标签: javascript unit-testing typescript mocha.js sinon


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多