Я пытаюсь написать тест для устранения дребезга пользовательского ввода в поисковом запросе. Функция определена в Backbone View:
SearchView = Backbone.View.extend({
events: {
"input .search-input": "search"
},
// init, render, etc.
search: _.debounce(function() {
this.collection.fetch();
}, 200)
});
Первоначально библиотека Backbone (v0.9.10) использовала Underscore (v1.4.4), а тест был определен следующим образом:
describe("SearchView", function() {
var view, $viewContainer;
beforeEach(function() {
appendSetFixtures('<div class="jasmine-container"></div>');
$viewContainer = $(".jasmine-container");
view = new SearchView({
el: $viewContainer
});
});
afterEach(function() {
view.remove();
view.cleanup();
});
//...
describe("wires the search input", function() {
var collectionStub,
fakeTimer;
beforeEach(function() {
collectionStub = sinon.stub(
SearchResultsCollection.prototype,
"fetch"
);
fakeTimer = sinon.useFakeTimers();
});
afterEach(function() {
collectionStub.restore();
fakeTimer.restore();
});
it("should not trigger a search before 200ms", function() {
fakeTimer.tick(199);
expect(collectionStub).not.toHaveBeenCalled();
});
it("should trigger a search after 200ms", function() {
fakeTimer.tick(200);
expect(collectionStub).toHaveBeenCalled();
});
});
});
Однако теперь я хочу включить LoDash вместо Underscore. Используя последнюю сборку совместимости с Underscore на их сайте (LoDash 2.4.1 / Underscore 1.5.6), все мои тесты проходят, кроме одного с использованием _.debounce!
Я провел небольшое исследование и наткнулся на эти актуальные issues для создания сборки LoDash Underscore с runInContext, но я понятия не имею, как ее использовать из-за отсутствия примеров. Как я могу использовать _.runInContext()
в своих спецификациях для работы с sinon.fakeTimer
?