2016-11-11 86 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); 

}); 
相关问题