我想知道我是否可以使用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预先加载。它包含一个stub 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();
});
});
我欢迎任何评论,甚至是那些“你为什么要这样做?”的评论。我觉得我已经花了太长时间盯着这个。
答案 0 :(得分:3)
您是否尝试过spyOn(window, "$")
?
答案 1 :(得分:0)
而不是这个
var aliasjQuery = {};
我可以像这样创建一个间谍功能
var aliasjQuery = jasmine.createSpy();
然后让它像这样返回控制存根
aliasjQuery.and.returnValue(control);
所以我可以这样做
expect(aliasjQuery).toHaveBeenCalledWith('pluto_namespacedualNationality');