1

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



});

我欢迎任何评论,即使是那些类似于“你到底为什么要这样做?”的评论。和替代解决方案,因为我认为我花了太长时间盯着这个。

4

2 回答 2

3

spyOn(window, "$")已经试过了吗?

于 2013-04-08T15:47:10.640 回答
0

而不是这个

var aliasjQuery = {};

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

var aliasjQuery = jasmine.createSpy();

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

aliasjQuery.and.returnValue(control);

那么我可以做到这一点

expect(aliasjQuery).toHaveBeenCalledWith('pluto_namespacedualNationality');
于 2016-03-30T16:32:28.360 回答