Próbuję napisać test do ujawnienia danych wprowadzanych przez użytkownika w zapytaniu. Funkcja jest określona na szkielecie Widok:Jak przetestować odbicia LoDash w Jasmine przy pomocy Sinon fakeTimer?
SearchView = Backbone.View.extend({
events: {
"input .search-input": "search"
},
// init, render, etc.
search: _.debounce(function() {
this.collection.fetch();
}, 200)
});
Początkowo biblioteka szkieletowe (v0.9.10) stosowane podkreślenia (v1.4.4), a test został zdefiniowany następująco:
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();
});
});
});
jednak , teraz chcę włączyć LoDash zamiast Underscore. Korzystając z najnowszej kompatybilności z Underscore na ich stronie (LoDash 2.4.1/Underscore 1.5.6), wszystkie moje testy przechodzą z wyjątkiem tego, który używa _.debounce!
Zrobiłem kilka badań i natknąłem się na te relevantissues, aby utworzyć kompresję spod znaku LoDash z runInContext, ale nie mam pojęcia, jak go użyć z powodu braku przykładów. Jak mogę użyć _.runInContext()
w mojej specyfikacji, aby pracować z sinon.fakeTimer
?
Niestety, nie rozumiem, ale ustawiłeś 'clock = sinon.useFakeTimers();' i później użyj innego var 'fakeTimer.tick (199)'. Błąd? – syabro