用 Sinon.JS 存根 async.waterfall
Stubbing async.waterfall with Sinon.JS
我正在尝试测试 async.waterfall
by stubbing one of my functions using Sinon.js。
// functions.js
module.exports = {
// function I don't want to run
doBigThing: function() {
console.log("[doBigThing] was called");
},
// function I want to stub
myFunction: function(number, callback) {
console.log("[myFunction] was called");
doBigThing();
callback(null, number);
},
// function I want to test
waterfall: function(callback) {
return async.waterfall([
async.constant(5), // 5 just for the demo
myFunction
], callback);
}
}
我的测试是:
describe('water', function() {
it ('successfully falls', function() {
// function under test
var waterfall = functions.waterfall;
var callback = function(err, number) {
expect(err).to.be.null;
expect(number).to.equal(5);
};
// I would like this stub to run instead of functions.myFunction
sinon.stub(functions, 'myFunction', function(number, callback) {
console.log("[myFunction] stub was called");
callback(null, number);
});
waterfall(callback);
// I suppose this is happening: myFunction(5, callback)
expect(functions.myFunction.withArgs(5, callback)).to.have.been.called;
expect(callback).to.have.been.called;
});
});
所以测试通过了,但是存根被忽略了,因为 doBigThing
被调用了:
Water
✓ successfully falls
[myFunction] was called
[doBigThing] was called
相反,我想看看
Water
✓ successfully falls
[myFunction] stub was called
我可能遗漏了什么,非常感谢你的帮助。
您正在存根 functions
对象的 方法 myFunction
,但在 waterfall
方法中您调用的是 myFunction
function(我实际上无法在我的环境中 运行 你的代码,我得到 "ReferenceError: myFunction is not defined")。所以这应该有效:
// functions.js
var functions = {
// function I don't want to run
doBigThing: function() {
console.log("[doBigThing] was called");
},
// function I want to stub
myFunction: function(number, callback) {
console.log("[myFunction] was called");
functions.doBigThing(); // CHANGE HERE
callback(null, number);
},
// function I want to test
waterfall: function(callback) {
return async.waterfall([
async.constant(5), // 5 just for the demo
functions.myFunction // CHANGE HERE
], callback);
}
};
module.exports = functions;
我正在尝试测试 async.waterfall
by stubbing one of my functions using Sinon.js。
// functions.js
module.exports = {
// function I don't want to run
doBigThing: function() {
console.log("[doBigThing] was called");
},
// function I want to stub
myFunction: function(number, callback) {
console.log("[myFunction] was called");
doBigThing();
callback(null, number);
},
// function I want to test
waterfall: function(callback) {
return async.waterfall([
async.constant(5), // 5 just for the demo
myFunction
], callback);
}
}
我的测试是:
describe('water', function() {
it ('successfully falls', function() {
// function under test
var waterfall = functions.waterfall;
var callback = function(err, number) {
expect(err).to.be.null;
expect(number).to.equal(5);
};
// I would like this stub to run instead of functions.myFunction
sinon.stub(functions, 'myFunction', function(number, callback) {
console.log("[myFunction] stub was called");
callback(null, number);
});
waterfall(callback);
// I suppose this is happening: myFunction(5, callback)
expect(functions.myFunction.withArgs(5, callback)).to.have.been.called;
expect(callback).to.have.been.called;
});
});
所以测试通过了,但是存根被忽略了,因为 doBigThing
被调用了:
Water
✓ successfully falls
[myFunction] was called
[doBigThing] was called
相反,我想看看
Water
✓ successfully falls
[myFunction] stub was called
我可能遗漏了什么,非常感谢你的帮助。
您正在存根 functions
对象的 方法 myFunction
,但在 waterfall
方法中您调用的是 myFunction
function(我实际上无法在我的环境中 运行 你的代码,我得到 "ReferenceError: myFunction is not defined")。所以这应该有效:
// functions.js
var functions = {
// function I don't want to run
doBigThing: function() {
console.log("[doBigThing] was called");
},
// function I want to stub
myFunction: function(number, callback) {
console.log("[myFunction] was called");
functions.doBigThing(); // CHANGE HERE
callback(null, number);
},
// function I want to test
waterfall: function(callback) {
return async.waterfall([
async.constant(5), // 5 just for the demo
functions.myFunction // CHANGE HERE
], callback);
}
};
module.exports = functions;