Мне было поручено написать тесты для следующего вида Backbone
. Однако я не написал код.метод sinon - stub private variable
В следующем примере кода я хочу, чтобы заглушить/шпионить метод update
, чтобы я мог проверить, что функция вызывается, когда атрибут liked
модели вида изменен, но я, похоже, не могу настроить этот метод.
Можно ли отключить функцию update
?
Когда я бегу моих тестов он записывает Hello
но тест возвращает следующую ошибку: AssertionError: expected update to have been called at least once, but it was never called
my.Special.Class.LikeButton = function (options) {
/* ***** Other private variables ******* */
var LikeButton = Marionette.ItemView.extend({
model: null,
sSolidPoly: null,
sEmptyPoly: null,
events: {
'click': 'toggleLike'
},
initialize: function (options) {
//Listen to changes in like property in case it's changed from another location in the UI
this.listenTo(this.model, 'change:liked', this.update);
},
onRender: function() {
this.setElement(this.el.innerHTML);
},
update: function() {
console.log('Hello');
.....
}
});
return new LikeButton(options);
}
Я попытался окурок функцию update
в beforeEach
функции для испытаний:
this._view = new my.Special.Class.LikeButton({
template: '#like-button-template',
model: this.model
});
this.updateStub = sinon.stub(this._view, 'update');
В моем тестовом наборе:
it('change to model liked attribute calls update', function() {
var __view = this._view.render();
this.model.set({liked: true});
expect(this.updateStub).has.been.called;
});
@hyprstack жаль, что я написал, что в синтаксисе жасмин! –
Не беспокойтесь. Я думаю, что лучшим подходом было бы иметь его в отдельном модуле, как вы предложили. Другой подход возвращает ту же ошибку, что и я описал. – hyprstack