我正在尝试在Node.js应用程序中使用nodeunit存根函数.这是我正在尝试做的简化版本:
在lib / file.js中:
var request = require('request');
var myFunc = function(input, callback){
request(input, function(err, body){
callback(body);
});
};
在test / test.file.js中:
var file = require('../lib/file');
exports['test myFunc'] = function (test) {
request = function(options, callback){
callback('testbody');
};
file.myFunc('something', function(err, body){
test.equal(body, 'testbody');
test.done();
});
};
好像我没有正确地覆盖请求,因为当我尝试运行测试时,实际的非存根请求被调用,但我无法弄清楚正确的方法是什么.
编辑:
通过上面的例子,扩展Ilya的答案.
在lib / file / js中:
module.exports = function(requestParam){
return {
myFunc: function(input, callback){
requestParam(input, function(err, body){
callback(body);
});
}
}
}
然后在test / test.file.js中:
var fakeRequestFunc = function(input, callback){
// fake request function
}
var file = require('../lib/file')(fakeRequestFunc)(
//test stuff
}
解决方法:
正如您所注意到的,在一个模块中声明的变量不能轻易地从另一个模块访问.在这种情况下,您有两种常见的变体:
1)在每个模块中声明你需要的一切(不是你的情况,我想)
2)将参数传递给函数
var ab = "foo",
index = require('/routes/index')(ab);
当您从模块中调用函数时,您可以将其传递给“请求”或您需要的任何其他变量或对象.