diff --git a/test/utils/scroll.test.js b/test/utils/scroll.test.js
new file mode 100644
index 0000000..7325db7
--- /dev/null
+++ b/test/utils/scroll.test.js
@@ -0,0 +1,65 @@
+import Scroll from '../../src/js/plugins/scroll';
+
+jest.useFakeTimers();
+
+// Copy of DOM.fireEvent, but using wheel deltas
+const fireEvent = (target, eventType, deltaX, deltaY) => {
+ const event = new CustomEvent(eventType);
+ event.deltaX = deltaX;
+ event.deltaY = deltaY;
+
+ target.dispatchEvent(event);
+};
+
+beforeAll(() => {
+ const brs = '
'.repeat(20);
+ document.body.innerHTML = `
${brs}
`;
+});
+
+test('Scroll utility', () => {
+ // Forces mobile detection
+ window.navigator = {userAgent: 'Android'};
+ const ws = document.getElementById('webslides');
+ const next = jest.fn();
+ const prev = jest.fn();
+
+ let disabled = true;
+ const webslides = {
+ el: ws,
+ isDisabled: () => {return disabled;},
+ isMoving: false,
+ isVertical: false,
+ goNext: next,
+ goPrev: prev,
+ options: {
+ navigateOnScroll: true,
+ scrollWait: 200,
+ minWheelDelta: 50
+ }
+ };
+
+ const scroll = new Scroll(webslides);
+ fireEvent(ws, 'wheel', 300, 200);
+
+ expect(next).not.toBeCalled();
+ expect(prev).not.toBeCalled();
+
+ // Wait until next execution
+ jest.runTimersToTime(201);
+ expect(next.mock.calls.length).toBe(0);
+ expect(prev.mock.calls.length).toBe(0);
+
+ disabled = false;
+ fireEvent(ws, 'wheel', 300, 200);
+
+ jest.runTimersToTime(201);
+ expect(next.mock.calls.length).toBe(1);
+ expect(prev.mock.calls.length).toBe(0);
+
+ fireEvent(ws, 'wheel', -200, -300);
+
+ jest.runTimersToTime(201);
+ expect(next.mock.calls.length).toBe(1);
+ expect(prev.mock.calls.length).toBe(1);
+
+});