Тестирование приложения backbone.js с помощью жасмина - как проверить привязки модели к представлению?

У меня были некоторые интересные проблемы при попытке проверить, правильно ли были привязаны представления к событиям. В магистрали мы обычно привязываемся к событиям в методе инициализации, используя что-то вроде: something.bind ("change", this.render); . В своем тесте я хочу убедиться, что эта привязка настроена, поэтому я сделал следующее:

this.myView = new MyView();
spyOn(this.myView, "render");;
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();

Но это не сработает. Поскольку привязка происходит в функции инициализации MyView, событие привязывается к функции визуализации myView В ЭТО ВРЕМЯ. Итак, когда вы добавляете своего шпиона, он оборачивает функцию рендеринга и устанавливает ее на место в myView.render. Но закрытие, созданное первой привязкой, все еще существует, и мы полностью находимся взаперти. Так что мы можем с этим поделать? Что я сделал, так это переместил вызов привязки в отдельную функцию, например:

myView = Backbone.View.extend({
initialize: function(){
    _.bindAll(this, "render");
    this.initialize_model_bindings();
},
initialize_model_bindings: function(){
    something.bind("change", this.render);
},
render: function(){ //... }
});

, и мой тест будет выглядеть так:

this.myView = new MyView();
spyOn(this.myView, "render");
this.myView.initialize_model_bindings();
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();

Это работает, но я ищу лучшее решение. Спасибо

20
задан blockhead 8 November 2011 в 09:10
поделиться