简体   繁体   English

模拟和测试Mocha,Chai和Sinon的按键事件?

[英]Simulate and test a keypress event with Mocha, Chai, Sinon?

I have a Backbone view that has custom events for keyup and keydown events. 我有一个Backbone视图,该视图具有用于keyupkeydown事件的自定义事件。

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

I'm writing unit tests to check if those callbacks are getting invoked after a keyup or keydown. 我正在编写单元测试,以检查在键入或按下键后是否调用了这些回调。 I use jQuery to trigger the key event. 我使用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;

});

However, I receive a 但是,我收到

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

Try this 尝试这个

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

});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM