spyOn toHaveBeen在模型测试中遇到错误

时间:2014-12-03 15:00:27

标签: angularjs unit-testing jasmine

我正在尝试测试Jasmine的toHaveBeenCalled()匹配器。 我的src:

function myModel (){
}

  myModel.prototype.getObjcts = function (){
    return DS.findAll('obj', {});
  }

茉莉花测试:

 describe('findAll', function(){
      it('check calling findAll()', function(){
        spyOn(DS, 'findAll');
        myModel.getObjcts();
        expect(DS.findAll('obj', {})).toHaveBeenCalled();
      });
    });

但是我一直都会收到错误

  

期待间谍,但未定义

请帮助我了解问题所在

1 个答案:

答案 0 :(得分:0)

  1. 您应该实例化myModel
  2. 类型的新对象
  3. 您的期望再次调用DS.finadAll而不是检查间谍。
  4. 以下是完整的解决方案:

    window.DS = {
        findAll: function (param1, param2) {}
    };
    
    
    function myModel() {}
    
    myModel.prototype.getObjcts = function () {
        return DS.findAll('obj', {});
    };
    
    
    describe('findAll', function () {
        it('check calling findAll()', function () {
            spyOn(DS, 'findAll');
            var testApp = new myModel();
            testApp.getObjcts();
            expect(DS.findAll).toHaveBeenCalledWith('obj', {});
        });
    });
    

    您可以在jsfiddle here

    中找到可运行的解决方案