如何测试是否使用Jasmine调用jQuery load()?

时间:2017-11-23 03:21:33

标签: javascript jquery unit-testing jasmine

我有一个javascript函数deleteSomething(),在其中调用jQuery中的load()函数。

function deleteSomething(a, b){
    deleteIt(a, b, function(success){
        if(success){
            $("#table").load(...);        
        }
    })
}

现在我想用Jasmine测试deleteSomething()以查看是否正在调用load()。但得到了Error: Expected a spy, but got Function

describe("deleteSomething", function() {
    beforeEach(function () {
        ...
    });
    it("should call load() when deleteIt returns true", function() {
        spyOn($('#table'), 'load'));

        deleteIt.and.callFake(function(a, b, callback){
            callback(true);
        });
        deleteSomething(a, b);

        expect($('#table').load).toHaveBeenCalled();
    });
});

我是Jasmine的新手,我应该怎么做?

1 个答案:

答案 0 :(得分:2)

你需要监视jQuery prototype,它可以在这里找到:$.fn

所以你的代码应该是这样的:

describe("deleteSomething", function() {
  it("Should call load", function() {
      //$.fn is where the load function is defined
      //  $("...") returns a new jQuery.fn instance that has load function
      //  from jQuery.fn.prototype
      spyOn($.fn, 'load');
      $("#anything").load();
      expect($.fn.load).toHaveBeenCalled();
  });
});

可以找到有关对象自身成员和原型成员(继承)之间差异的更多信息{。{3}}。