javascript - 如何测试Javascript中另一个函数的函数调用次数?

标签 javascript unit-testing qunit sinon

假设我有这个功能:

function doSomething(n) {
    for (var i = 0; i < n; i++) {
        doSomethingElse();
    }
}

我如何测试 doSomethingElse 函数是否被调用了 n 次??

我试过类似的方法:

test("Testing something", function () {
    var spy = sinon.spy(doSomethingElse);

    doSomething(12);

    equal(spy.callCount, 12, "doSomethingElse is called 12 times");
});

但这似乎不起作用,因为您必须在 doSomething() 调用原始 doSomethingElse() 时调用 spy 。我怎样才能使它与 QUnit/sinon.js 一起工作?

编辑

也许这甚至不是一个好主意?这是否因为调用了另一个函数而超出了“单元测试”范围?

最佳答案

你可以这样做:

test('example1', function () {
    var originalDoSomethingElse = doSomethingElse;
    doSomethingElse = sinon.spy(doSomethingElse);
    doSomething(12);
    strictEqual(doSomethingElse.callCount, 12);
    doSomethingElse = originalDoSomethingElse;
});

例如:JSFiddle .

关于javascript - 如何测试Javascript中另一个函数的函数调用次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22716439/

相关文章:

ruby-on-rails - 用于测试服务对象的 Rspec 建议

testing - Qunit beforeEach,afterEach - 异步

ruby-on-rails - Growl with guard 和 spork 在 OS 10.6.6 上静默失败

unit-testing - 使用 QUnit、Grunt 和 RequireJS 进行单元测试

javascript - 不使用 XHR 加载资源

javascript - React 在渲染之前更改 html,例如更改样式、添加 span 标签等

javascript - 更改页面时AngularJS自定义窗口

Javascript 绑定(bind) 'click' 和 PreventDefault() 不起作用

javascript - 让 jquery 显示相应的文本

javascript - 将多个参数传递给 addCallBackElement Google 脚本