2016-11-11 8 views
0

У меня есть вид с базой, который имеет пользовательские события для keyup и keydown событий.Имитировать и протестировать событие нажатия клавиши 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

Вы настраиваете свой шпион после того, как вы вызвали щелчок, что происходит, когда вы переместите его вторая строка в вашей тестовой функции? –

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

}); 

 Смежные вопросы

  • Нет связанных вопросов^_^