在(不同)闭包中使用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
。