考虑以下情况:
function MyClass() { ... }
MyClass.prototype.funcToTest = function() {
varl self = this;
async.waterfall([
async.apply(self.a.func.bind(self.a), 5, 'hi'),
function(result, callback) {
...
// I want to test this function
// I can't move it to separate function due to closure variables used
}
], function(err, result) {
...
}
);
}
module.exports = MyClass;
我如何测试提供给async.waterfall()
的任务数组中的第二个函数?
我做了以下但是没有用:
var MyClass = require('my-class;);
var stub = sinon.stub();
stub.yields(null, [1, 2, 3]);
var myClassIsntance = {
a: {
func: stub
}
};
MyClass.prototype.funcToTest.call(myClassIsntance);
但第二个功能没有被调用,我不知道为什么。如果我没有弄错async.waterfall()
应该立即调用 at-least 它的第一个任务,并且我使用sinon的yields()
方法,因此它会立即调用第二个任务,但它不会似乎工作。我的猜测是,在场景后面有一些异步操作停止执行我不知道的第二个任务。我甚至在调用funcToTest()
之后尝试使用sinon的假计时器,看看之后是否会调用第二个任务,但是它没有用。