Ожидаемый шпион, но получил функцию
Я пытаюсь реализовать тест (1) для этого модуля (2).
Моя цель - проверить, извлекается ли коллекция при возникновении определенного события.
Как вы можете видеть из моего комментария в (2), я получаю сообщение Error: Expected a spy, but got Function.
Модуль работает, но тест терпит неудачу. есть идеи?
(1)
// jasmine test module
describe('When onGivePoints is fired', function () {
beforeEach(function () {
spyOn(this.view.collection, 'restartPolling').andCallThrough();
app.vent.trigger('onGivePoints');
});
it('the board collection should be fetched', function () {
expect(this.view.collection.restartPolling).toHaveBeenCalled();
// Error: Expected a spy, but got Function.
});
});
(2)
// model view module
return Marionette.CompositeView.extend({
initialize: function () {
this.collection = new UserBoardCollection();
this.collection.startPolling();
app.vent.on('onGivePoints', this.collection.restartPolling);
},
// other code
});
Ответы
Ответ 1
Вам нужно войти в фактический метод, который в этом случае находится на прототипе.
describe('When onGivePoints is fired', function () {
beforeEach(function () {
spyOn(UsersBoardCollection.prototype, 'restartPolling').andCallThrough();
app.vent.trigger('onGivePoints');
});
it('the board collection should be fetched', function () {
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();
});
});
Шпионаж на прототипе - хороший трюк, который вы можете использовать, когда не можете добраться до фактического экземпляра, на который хотите следить.
Ответ 2
Я тоже получал ту же проблему, но я решил ее, передав аргумент в вызове функции. Затем вы должны написать свой тестовый пример, как в it
var data = {name:"test"}
spyOn(UsersBoardCollection.prototype, "restartPolling").and.callThrough();
UsersBoardCollection.prototype.restartPolling(data);
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();
Ответ 3
У меня была эта ошибка, потому что у меня было две версии синона, или, возможно, я не инициализировал синон-жасмин правильно. Когда я явно загрузил синус, а затем синус жасмин в моей спецификации, он начал работать правильно.