2012-08-21 5 views
18

Я пытаюсь реализовать тест (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 
}); 
+0

не хватает кода, чтобы узнать, что происходит. пожалуйста, включите не только отдельные функции - включите определение объекта, к которому принадлежат функции, и код, который инстанцирует объекты, по крайней мере. –

+0

@DerickBailey спасибо за ваше время. Я обновил свой вопрос с помощью кода режима. –

+0

Я использую QUnit, а не Жасмин, но не должен ли ваш вызов app.vent.trigger быть в методе «it», а не раньше? – codemonkey

ответ

32

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

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(); 
+0

спасибо, работал для меня отлично !!! –

-2

Я имел эту ошибку, потому что у меня было две версии Синона загружены, или, возможно, я не был инициализацией Sinon-жасмин правильно. Когда я явно загрузил синус, а затем синус жасмин в моей спецификации, он начал работать правильно.

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