说我有这个功能:

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

10-04 17:00