2016-11-11 11 views
0

私はkeyupと​​イベントのカスタムイベントを持つバックボーンビューを持っています。Mocha、Chai、Sinonでキー入力イベントをシミュレートしてテストしますか?

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

キーアップまたはキーダウンの後にこれらのコールバックが呼び出されるかどうかをチェックするためのユニットテストを書いています。私はキーイベントをトリガするために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

をお試しください受けますあなたのテスト関数の2行目? –

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

}); 
関連する問題