2016-11-11 13 views
0

Ich habe eine Backbone-Ansicht mit benutzerdefinierten Ereignissen für keyup und keydown Ereignisse.Simulieren und testen Sie ein Tastendruckereignis mit Mocha, Chai, Sinon?

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

Ich schreibe Unit-Tests zu überprüfen, ob diese Rückrufe werden nach einem keyup oder keydown aufgerufen zu werden. Ich benutze jQuery, um das Schlüsselereignis auszulösen.

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; 

}); 

aber ich erhalte eine

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

Sie der Einrichtung Ihres Spion, nachdem Sie den Klick ausgelöst haben, was passiert, wenn man es auf die bewegen zweite Zeile in Ihrer Testfunktion? –

+0

@HenrikAndersson das ist Material zu beantworten. –

+0

@HenrikAnderson Hmm es gibt mir immer noch den gleichen Fehler – ElGatoGabe

Antwort

0

Versuchen Sie, diese

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

}); 
Verwandte Themen