茉莉花间谍只检测调用Node.js导出对象的方法调用

我试图从一个Jasmine规范窥探Node.js模块中的依赖关系,并且遇到一些奇怪的行为。

Jasmine探讨了驻留在模块中的exports对象所公开的对象上的方法。 当我调用模块中的spied-on方法时

exports.umap() 

间谍发现它。 但是,当我在模块中使用我分配给相同的方法的variables名称

 var umap = exports.umap umap() 

间谍不检测它。

这看起来很奇怪,因为var umap引用与exports.umap相同的方法。 任何人有任何想法,为什么这是? 下面的代码。

(我这样做的全部原因是我想模块的依赖关系,而不需要devise模块作为一个类,并使用dependency injection。)

 // mapper.js exports.umap = require('underscore').map; var umap = exports.umap; function map () { return exports.umap([1,2,3], function(el) {console.log(el);return el * 2}); // umap() goes unnoticed by the spy // return umap([1,2,3], function(el) {console.log(el);return el * 2}); } exports.map = map; 

 // mapper_spec.js var mapper = require ('../../lib/mapper'); var map = mapper.map; describe('mapper', function() { describe('map', function() { it('calls umap', function() { var mapped; spyOn(mapper, 'umap').and.callThrough(); mapped = mapper.map(); expect(mapper.umap).toHaveBeenCalled(); expect(mapped).toEqual([2,4,6]); }); }); }); 

UPDATE

我仍然对这个问题感到好奇,但是https://www.npmjs.org/package/proxyquire使我的整个“事件附加到输出对象”战略没有实际意义。

       

网上收集的解决方案 "茉莉花间谍只检测调用Node.js导出对象的方法调用"