2015-06-25 3 views
1

У меня есть класс SomeClass с методом SomeClass.fetch()Как я могу проверить функцию обратного вызова в жасмин

var repository = { 
    get: function(obj) { 
     //... 
    } 
}; 

var cache = false; 

var SomeClass = { 

    init: function() { 
     //... 
    }, 

    fetch: function() { 
     var _this = this; 

     repository.get({ 
      method: 'getRecentDialogsList', 
      success: function (result) { 
       if (!cache) { 
        _this.set(result); 
        _this.sort(); 
        _this.trigger('fetch:success', _this); 
       } 

       _this.trigger('fetch:ajaxSuccess', _this); 
      } 
     }); 
    } 
} 

Как я могу проверить, является ли SomeClass.fetch() и проверки были названы this.set(), this.sort, this.trigger с параметрами?

ответ

1

Вы должны использовать spyes:

describe("SomeClass Test", function() { 
    it("calls the set() method when fetch is called", function() { 
     spyOn(SomeClass, "set"); 
     SomeClass.fetch(); 
     expect(SomeClass.set).toHaveBeenCalled(); 
    }); 
}); 

Вы можете даже полностью заменить вызываемый метод (например, если это займет много времени, которое должно быть завершено) с чем-то вроде этого:

spyOn(SomeClass, "set").and.callFake(function myFakeSet() { 
    console.log("I've been called"); 
}); 
+0

I должен mock repository.get(), кто вызывает обратный вызов успеха в файле repository.get()? – maxgu

+0

Я не уверен, что следую за вами: вы спрашиваете, нужно ли вам издеваться над 'repository.get'? Тогда ответ будет отрицательным, так как он назовет эту функцию успеха, которая в свою очередь вызовет 'SomeClass.set'. –

Смежные вопросы