Sinon.js在对象内部存根匿名函数

时间:2016-06-03 13:52:52

标签: javascript node.js unit-testing testing sinon

所以我对我的代码进行单元测试,我在测试一个在我单元测试的函数内部调用的匿名函数时遇到了问题。 之所以我没有将匿名函数作为一个名为function的实例,是因为我需要从单元测试函数中关闭一些变量来在匿名函数中使用。 举例说明:

function funcBeingTested(done, arg1) {
    var self = this; 
    ...
    self.array.push({
        "arguments": [
            "x", "y", function (error, result) {
                // do some stuff with arg1...
                done(error, arg1);
            }, "z"
        ]
    });
    ...
    self.run(); // Eventually will call the anonymous function above from 'self.array'
}

现在,我的问题是有一种方法可以测试使用sinon.js在匿名函数内部进行的操作吗?在某些情况下,我可以使用特定参数调用它作为{{的单元测试的一部分1}}?

修改 澄清对我想要达到的目标的任何误解, 我希望能够对匿名函数进行单元测试,并覆盖所有可能的分支以获得100%的覆盖率。我已经知道如何检查funcBeingTested()回调是否被调用,以及使用sinon.js的args,问题是如何在隔离中测试匿名函数,并使用特定参数调用它以涵盖所有可能的分支。

1 个答案:

答案 0 :(得分:1)

您可以通过定义done函数并监视它来测试匿名函数。在调用匿名函数时,您需要知道是否使用正确的参数调用此函数。

例如:

// Define the `done` function.
var doneFunction = function (error, args) {
  // do something
};

// Spy on the `done` function to register calls.
var doneSpy = sinon.spy(doneFunction);

// Test the funcBeingTested
funcBeingTested(doneFunction, someArg);

// Check that doneFunction was called
assert(doneSpy.calledWith(someArg));

您可以阅读有关Spy API for Sinon

的更多信息