Жасмин ожидала, что шпионская функция была вызвана на backbone.view
У меня проблемы с пониманием шпионов с помощью моих тестов на жасмин.
Когда я запускаю тест ниже, я вижу вывод CLOSE EVENT
в моей консоли, но тест triggers close
выходит из строя.
Как правильно написать тест, используя шпионов?
define([
'backbone'
], function(Backbone){
describe('TEST', function(){
beforeEach(function(){
this.view = new (Backbone.View.extend({
initialize: function(){
_(this).bindAll('close');
this.$el.append($('<span>', {class: 'closeview'}));
$('body').append(this.$el);
this.$el.on('click', '.closeview', this.close);
},
close: function(){
console.log('CLOSE EVENT');
}
}));
});
it('exists', function(){
expect(this.view.$el).toBeVisible();
});
it('triggers close', function(){
spyOn(this.view, 'close');
this.view.$el.find('.closeview').trigger('click');
expect(this.view.close).toHaveBeenCalled();
});
});
});
1 ответ
Когда вы шпионите за функцией, вы фактически заглушаете метод. Если вы просто хотите проверить, была ли вызвана функция, но важно, чтобы содержимое выполнялось, вам нужно добавить:
and.callThrough()
Попробуйте изменить ваш пример так:
spyOn(this.view, 'close').and.callThrough();
И посмотрите, поможет ли это вам с вашей проблемой:)