我試圖測試一個視圖方法在我的模型觸發事件時被調用。但這不起作用 - 而且我已經沒有想到爲什麼會這樣。下面是一個不正常的代碼:觸發Backbone模型事件不註冊在我的Jasmine間諜
查看:
class View extends Backbone.View
initialize: ->
@.listenTo @model, 'request', @disableForm, @
disableForm: ->
console.log 'disableForm'
茉莉花測試:
describe "AJAX events", ->
it "when starting an AJAX request, disable the form", ->
model = new Backbone.Model()
view = new Backbone.View({ model: model })
view.render()
spyOn(view, 'disableForm')
view.delegateEvents()
model.trigger 'request'
expect(view.disableForm).toHaveBeenCalled()
此代碼在瀏覽器的罰款。
另外 - console.log在我運行測試時打印出'disableForm' - 所以模型事件觸發了disableForm的調用,但是我的間諜沒有選擇它(我的期望失敗)。我試圖把它放到waitsFor方法中,但他也沒有什麼區別。
任何想法我錯了?
啊是的。這是完全合理的。謝謝。 – Joerg 2013-04-26 05:51:38
測試模塊中組件的推薦方法是什麼?我可以在每次測試之前啓動和停止模塊,但這並不能模擬實際行爲 – dbrin 2014-05-23 05:49:36
我必須處理這個問題的方法是在測試中很好地和早期地監視原型方法。所以: spyOn(View.prototype,'disableForm'); 這確保了當你的方法被綁定時,它們綁定到方法的一個窺探版本。這不是很好,並導致稍微不太好的封裝測試,但它的工作原理。 另一種方法是將綁定的實現更改爲接受方法名稱而不是函數引用。這樣你可以在每個事件上按名稱調用方法。但改變綁定實現有點沉重! – Tom 2014-06-13 14:18:51