node.js单元测试mock依赖关系



我有一个关于使用proxyquire的问题(或关于如何测试以下代码的任何其他建议)

如果我有以下文件要测试:

var path = require('path');
module.exports = function (conf) {
    var exported = {};
    exported.getIssue = function (issueId, done) {
        ...
        ...
    };
    return exported;
};

如何在使用proxyquire模拟"path"时传入"conf"变量;var?

如果不使用proxyquire,还有其他方法吗?

您只需通过proxyquire将conf变量传递给所需的模块/函数。Proxyquire的意思是做CommonJ需要的东西,但可能会嘲笑和研究一些模块。所以你也应该这样做。

var pathMock = {
   someMethod = function() {}  
};
var confMock = {
   someMethod = function() {}
};
spyOn(pathMock, 'someMethod').and.callThrough();
spyOn(confMock, 'someMethod').and.callThrough();
module   = proxyquire('../path/to/module', {
    path: pathMock
});
it('do some test', function(done) {
    module(conf).getIssue();
    expect(pathMock.someMethod).toHaveBeenCalled;
    expect(confMock.someMethod).toHaveBeenCalled;        
});

最新更新