我想知道我是否可以使用 Jasmine 监视 jQuery 中的 $ 函数。
这是我要测试的代码。
var Wrapper = Wrapper || {};
Wrapper.Controls = {};
/**
* Use an anonymous function to initialize all JavaScript
*/
(function($) {
Wrapper.Controls.Utils = function() {
var external = {
showHide : function(namespace, controlNameStem){
var stem = namespace + controlNameStem;
$(stem + 'Controller').click();
}
};
return external;
};
return Wrapper.Controls.Utils;
}(Wrapper.jQuery));
Wrapper.jQuery 位于一个单独的文件中,该文件在加载 Wrapper 之前由 Jasmine 预加载。它包含一个存根 jQuery,其定义如下
var aliasjQuery = {};
var Wrapper = Wrapper || {};
Wrapper.jQuery = aliasjQuery;
这意味着当 Wrapper 初始化时,aliasjQuery 是作为 Wrapper.jQuery 传递给匿名函数的对象
我的 Jasmine 测试规范如下所示:
describe("form control utils", function(){
var controlUtils = Wrapper.Controls.Utils();
var namespace = 'pluto_namespace';
var controlName = 'dualNationality';
it("showHide fires click event on controlNameController", function(){
var control = { click : function(){}};
spyOn(aliasjQuery, '$').andReturn(control);
spyOn(control, 'click');
controlUtils.showHide(namespace, controlName);
expect(control.click).toHaveBeenCalled();
});
});
我欢迎任何评论,即使是那些类似于“你到底为什么要这样做?”的评论。和替代解决方案,因为我认为我花了太长时间盯着这个。