模拟和测试一个按键事件与摩卡,Chai, Sinon

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

本文关键字:事件 摩卡 Chai Sinon 一个 测试 模拟      更新时间:2023-09-26

我有一个Backbone视图,其中包含keyupkeydown事件的自定义事件。

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

试试这个

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