aboutsummaryrefslogtreecommitdiff
path: root/js/tests/unit/scrollspy.spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tests/unit/scrollspy.spec.js')
-rw-r--r--js/tests/unit/scrollspy.spec.js87
1 files changed, 41 insertions, 46 deletions
diff --git a/js/tests/unit/scrollspy.spec.js b/js/tests/unit/scrollspy.spec.js
index 248639e17..3412efaa1 100644
--- a/js/tests/unit/scrollspy.spec.js
+++ b/js/tests/unit/scrollspy.spec.js
@@ -7,6 +7,11 @@ import { clearFixture, createEvent, getFixture, jQueryMock } from '../helpers/fi
describe('ScrollSpy', () => {
let fixtureEl
+ const scrollTo = (el, height) => {
+ // el.scrollTo({ top: height })
+ el.scrollTop = height
+ }
+
const onScrollStop = (callback, element, timeout = 30) => {
let handle = null
const onScroll = function () {
@@ -36,25 +41,29 @@ describe('ScrollSpy', () => {
].join('')
}
- const testElementIsActiveAfterScroll = ({ elementSelector, targetSelector, contentEl, scrollSpy, spy, cb }) => {
+ const testElementIsActiveAfterScroll = ({ elementSelector, targetSelector, contentEl, scrollSpy, cb }) => {
const element = fixtureEl.querySelector(elementSelector)
const target = fixtureEl.querySelector(targetSelector)
// add top padding to fix Chrome on Android failures
- const paddingTop = 5
+ const paddingTop = 0
const parentOffset = getComputedStyle(contentEl).getPropertyValue('position') === 'relative' ? 0 : contentEl.offsetTop
const scrollHeight = (target.offsetTop - parentOffset) + paddingTop
- function listener() {
+ contentEl.addEventListener('activate.bs.scrollspy', event => {
+
+ if (scrollSpy._activeTarget !== element) {
+ return
+ }
+
expect(element.classList.contains('active')).toEqual(true)
expect(scrollSpy._activeTarget).toEqual(element)
- spy.calls.reset()
+ expect(event.relatedTarget).toEqual(element)
cb()
- }
+ })
setTimeout(() => { // in case we scroll something before the test
- onScrollStop(listener, contentEl)
- contentEl.scrollTo({ top: scrollHeight })
- }, 50)
+ scrollTo(contentEl, scrollHeight)
+ }, 100)
}
beforeAll(() => {
@@ -151,7 +160,7 @@ describe('ScrollSpy', () => {
done()
}, scrollSpyEl)
- scrollSpyEl.scrollTo({ top: 350 })
+ scrollTo(scrollSpyEl, 350)
})
it('should only switch "active" class on current target specified w element', done => {
@@ -189,7 +198,7 @@ describe('ScrollSpy', () => {
done()
}, scrollSpyEl)
- scrollSpyEl.scrollTo({ top: 350 })
+ scrollTo(scrollSpyEl, 350)
})
it('should correctly select middle navigation option when large offset is used', done => {
@@ -225,7 +234,7 @@ describe('ScrollSpy', () => {
done()
}, contentEl)
- contentEl.scrollTo({ top: 550 })
+ scrollTo(contentEl, 550)
})
it('should add the active class to the correct element', done => {
@@ -247,22 +256,19 @@ describe('ScrollSpy', () => {
offset: 0,
target: '.navbar'
})
- const spy = spyOn(scrollSpy, '_process').and.callThrough()
testElementIsActiveAfterScroll({
elementSelector: '#a-1',
targetSelector: '#div-1',
contentEl,
scrollSpy,
- spy,
cb: () => {
testElementIsActiveAfterScroll({
elementSelector: '#a-2',
targetSelector: '#div-2',
contentEl,
scrollSpy,
- spy,
- cb: () => done()
+ cb: done
})
}
})
@@ -287,22 +293,19 @@ describe('ScrollSpy', () => {
offset: 0,
target: '.navbar'
})
- const spy = spyOn(scrollSpy, '_process').and.callThrough()
testElementIsActiveAfterScroll({
elementSelector: '#a-1',
targetSelector: '#div-1',
contentEl,
scrollSpy,
- spy,
cb: () => {
testElementIsActiveAfterScroll({
elementSelector: '#a-2',
targetSelector: '#div-2',
contentEl,
scrollSpy,
- spy,
- cb: () => done()
+ cb: done
})
}
})
@@ -327,22 +330,19 @@ describe('ScrollSpy', () => {
offset: 0,
target: '.navbar'
})
- const spy = spyOn(scrollSpy, '_process').and.callThrough()
testElementIsActiveAfterScroll({
elementSelector: '#a-1',
targetSelector: '#div-1',
contentEl,
scrollSpy,
- spy,
cb: () => {
testElementIsActiveAfterScroll({
elementSelector: '#a-2',
targetSelector: '#div-2',
contentEl,
scrollSpy,
- spy,
- cb: () => done()
+ cb: done
})
}
})
@@ -382,10 +382,10 @@ describe('ScrollSpy', () => {
expect(active()).toBeNull()
done()
}, contentEl)
- contentEl.scrollTo({ top: 0 })
+ scrollTo(contentEl, 0)
}, contentEl)
- contentEl.scrollTo({ top: 201 })
+ scrollTo(contentEl, 201)
})
it('should not clear selection if above the first section and first section is at the top', done => {
@@ -428,10 +428,10 @@ describe('ScrollSpy', () => {
done()
}, contentEl)
- contentEl.scrollTo({ top: 0 })
+ scrollTo(contentEl, 0)
}, contentEl)
- contentEl.scrollTo({ top: startOfSectionTwo })
+ scrollTo(contentEl, startOfSectionTwo)
})
it('should correctly select navigation element on backward scrolling when each target section height is 100%', done => {
@@ -459,46 +459,41 @@ describe('ScrollSpy', () => {
offset: 0,
target: '.navbar'
})
- const spy = spyOn(scrollSpy, '_process').and.callThrough()
+ scrollTo(contentEl, 0)
testElementIsActiveAfterScroll({
elementSelector: '#li-100-5',
targetSelector: '#div-100-5',
- scrollSpy,
- spy,
contentEl,
- cb() {
- contentEl.scrollTo({ top: 0 })
+ scrollSpy,
+ cb: () => {
+ scrollTo(contentEl, 0)
testElementIsActiveAfterScroll({
elementSelector: '#li-100-4',
targetSelector: '#div-100-4',
- scrollSpy,
- spy,
contentEl,
- cb() {
- contentEl.scrollTo({ top: 0 })
+ scrollSpy,
+ cb: () => {
+ scrollTo(contentEl, 0)
testElementIsActiveAfterScroll({
elementSelector: '#li-100-3',
targetSelector: '#div-100-3',
- scrollSpy,
- spy,
contentEl,
- cb() {
- contentEl.scrollTo({ top: 0 })
+ scrollSpy,
+ cb: () => {
+ scrollTo(contentEl, 0)
testElementIsActiveAfterScroll({
elementSelector: '#li-100-2',
targetSelector: '#div-100-2',
- scrollSpy,
- spy,
contentEl,
- cb() {
- contentEl.scrollTo({ top: 0 })
+ scrollSpy,
+ cb: () => {
+ scrollTo(contentEl, 0)
testElementIsActiveAfterScroll({
elementSelector: '#li-100-1',
targetSelector: '#div-100-1',
- scrollSpy,
- spy,
contentEl,
+ scrollSpy,
cb: done
})
}