0

У меня есть класс, как:Тестирование обработчика событий на объекте с жасмином

MyClass = function() { 
    var view = { 
     delegateEvents: function() { 
      this.$el.on('click', 'input[type="radio"]', this.toggleServices); 
     }, 
     toggleServices: function() { 
      … 
     }, 
     render: function() { 
      blah-blah-blag (rendering the view)… 
      this.delegateEvents(); 
     } 
    }; 
    view.init(); 
    return view; 
} 

(как я получаю $el выходит за рамки вопроса, но убедитесь, что он работает) Я тестирование экземпляр этот класс в Жасмин нравится:

it('it handles clicks on radio buttons', function() { 
    var view = new MyClass(); 
    view.render(); 

    spyOn(view, 'toggleServices'); 
    view.$('input[type="radio"]').eq(0).click(); 
    expect(view.toggleServices).toHaveBeenCalled(); 
}); 

проблема заключается в том, что в настоящее время в тесте, шпион не вызывается, но код переходит в оригинальные toggleServices() классе вместо того, чтобы быть шпионом. Похоже, я не понимаю, как создать шпиона, который запросил бы this.toggleServices в init().

Любые предложения?

ответ

2

Вы должны шпионить перед установкой слушателей, другими словами, просто шпионить перед визуализацией вызова.

it('it handles clicks on radio buttons', function() { 
    var view = new MyClass(); 
    spyOn(view, 'toggleServices'); 
    view.render(); 

    view.$('input[type="radio"]').eq(0).click(); 
    expect(view.toggleServices).toHaveBeenCalled(); 
}); 
+0

Извините, забыли принять ответ. Конечно, это была проблема. – spliter

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