2016-11-11 71 views
0

我有一個Backbone視圖,它具有keyup和​​事件的自定義事件。用Mocha,Chai,Sinon模擬和測試按鍵事件?

events: { 
    "keyup .search-box": "changeTextTimer", 
    "keydown .search-box": "cancelTextTimer" 
}, 

我正在寫單元測試來檢查這些回調是否在keyup或keydown之後被調用。我使用jQuery來觸發關鍵事件。

it("should call cancelTextTimer", function() { 
    var searchBox = new SearchBoxView({el: $(HTML),}).render(); 

    var e = $.Event("keydown"); 
    e.which = 65; 
    searchBox.$(".search-box").trigger(e); 

    var changeTextTimer = sinon.spy(searchBox, "cancelTextTimer"); 
    _.defer(changeTextTimer.restore); 

    changeTextTimer.should.have.been.calledOnce; 

}); 

不過,我收到

AssertionError: expected cancelTextTimer to have been called exactly once, but 
it was called 0 times: Got value cancelTextTimer but expected a value undefined undefined 
+1

你設置你的間諜你觸發點擊後,當你將它移動到會發生什麼第二行在你的測試功能? –

+0

@HenrikAndersson這是答案材料。 –

+0

@HenrikAnderson嗯它仍然給我同樣的錯誤 – ElGatoGabe

回答

0

試試這個

it("should call cancelTextTimer", function(done) { 
    var searchBox = new SearchBoxView({el: $(HTML),}).render(); 
    var changeTextTimer = sinon.spy(searchBox, "cancelTextTimer"); 
    _.defer(changeTextTimer.restore); 

    var e = $.Event("keydown"); 
    e.which = 65; 
    searchBox.$(".search-box").trigger(e); 

    setTimeout(() => { 
     changeTextTimer.should.have.been.calledOnce; 
     done(); 
    }, 0); 

}); 
相關問題