假设我有以下内容:
lib/modules/module1.js
var m2 = require('module2');
module.exports = function(){
return {
// ...
get: function(cb){
m2.someMethod(params, function(error, data){
if(error){
cb(error)
}
cb(null, data)
})
},
// ...
}
}
现在假设我在另一个目录中有一组测试,例如测试/testModule1.js。从该文件中,我创建了一个 module1
实例来执行一些测试。
我想模拟从文件 testModule1.js 中由 m2.someMethod
传递到其回调函数(不是 cb
函数)的对象。
我调查过Sinon.js ,但我想不出办法来做到这一点。事实上,我什至可能吗?
谢谢。
最佳答案
您可以使用诸如 proxyquire
之类的东西,但我不喜欢修改内置的 require
。
就我个人而言,我建议重写您的代码以使用依赖项注入(inject):
module.exports = function(m2){
return {
// ...
get: function(cb){
m2.someMethod(params, function(error, data){
if(error){
cb(error)
}
cb(null, data)
})
},
// ...
}
}
请注意,我将 m2
移动为导出函数中的参数。然后在其他地方(应用程序,或主要,或其他),你可以这样做:
app.js
var module1Creator = require('module1');
var module2 = require('module2');
var module1 = module1Creator(module2);
然后当你需要测试它时......
testModule1.js
var module1Creator = require('module1');
// inject the "fake" version containing test data, spies, etc
var module2Mocked = require('module2mock');
var module1 = module1Creator(module2mocked);
关于javascript - 如何在Nodejs中模拟外部依赖方法回调参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39174974/