javascript – 覆盖node.js中其他模块中的函数

我正在尝试在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);

当您从模块中调用函数时,您可以将其传递给“请求”或您需要的任何其他变量或对象.

上一篇:javascript – 使用SinonJS存根(带重新连接)


下一篇:Spring Cloud Contract 微服务契约测试框架