在(不同)闭包中使用Jasmine来“spyOn”函数

在(不同)闭包中使用Jasmine来“spyOn”函数,jasmine,closures,browserify,require,spyon,Jasmine,Closures,Browserify,Require,Spyon,我们使用的是require和Browserify,因此单功能模块的导入方式如下: var loadJson = require('../loadJson'); x = loadJson(url); 使用方法如下: var loadJson = require('../loadJson'); x = loadJson(url); 我想spyOn加载JSON函数,但似乎不可能 它不是一个全局函数,所以这不起作用: spyOn(window, 'loadJson') 它不是一个局部函数,所以

我们使用的是
require
和Browserify,因此单功能模块的导入方式如下:

var loadJson = require('../loadJson');
x = loadJson(url);
使用方法如下:

var loadJson = require('../loadJson');
x = loadJson(url);
我想
spyOn
加载JSON函数,但似乎不可能

它不是一个全局函数,所以这不起作用:

spyOn(window, 'loadJson')
它不是一个局部函数,所以这不起作用:

loadJson = createSpy('loadJsonSpy', loadJson).and.callThrough();
当我
require
将模块放入我的Jasmine规范时,该函数在该闭包中可见,但这与实际使用
loadJson
的其他模块的闭包不同


所以简而言之,我认为在这种情况下不可能使用
spyOn
,对吗?任何创造性的解决方法?

如果
loadJson
是单例的,那么您可以这样做

var functionsToSpyOn = {loadJson: loadJson}
spyOn(functionsToSpyOn, 'loadJson')

这是我遇到相同问题时使用的解决方法。

如果
loadJson
是单例的,那么您可以这样做

var functionsToSpyOn = {loadJson: loadJson}
spyOn(functionsToSpyOn, 'loadJson')

这是我遇到同样问题时使用的解决方法。

哦。该链接用于测试私有函数
loadJson
在您的情况下不是私有函数。您确定吗?它特别是关于测试闭包中的函数-它只调用它们“私有函数”。
function closureOne(){function privA(){}返回函数pubB(){}}function closuretoo(){var refefb=closureOne()}
在本例中
privA()
是私有的
pubB()
是公共的。在
cloureTwo()
中,通过引用
pubB
refefb
(闭包私有变量)并不会使
pubB
成为私有函数。
pubB
类似于您案例中的
loadJson
。该链接用于测试私有函数
loadJson
在您的情况下不是私有函数。您确定吗?它特别是关于测试闭包中的函数-它只调用它们“私有函数”。
function closureOne(){function privA(){}返回函数pubB(){}}function closuretoo(){var refefb=closureOne()}
在本例中
privA()
是私有的
pubB()
是公共的。在
cloureTwo()
中,通过引用
pubB
refefb
(一个闭包私有变量)不会使
pubB
成为私有函数。
pubB
类似于您案例中的
loadJson