我可以使用Jasmine监视jQuery。$?

时间:2013-04-08 15:42:27

标签: jquery jasmine

我想知道我是否可以使用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();
});



});

我欢迎任何评论,甚至是那些“你为什么要这样做?”的评论。我觉得我已经花了太长时间盯着这个。

2 个答案:

答案 0 :(得分:3)

您是否尝试过spyOn(window, "$")

答案 1 :(得分:0)

而不是这个

var aliasjQuery = {};

我可以像这样创建一个间谍功能

var aliasjQuery = jasmine.createSpy();

然后让它像这样返回控制存根

aliasjQuery.and.returnValue(control);

所以我可以这样做

expect(aliasjQuery).toHaveBeenCalledWith('pluto_namespacedualNationality');