site_marriage/node_modules/waypoints/test/sticky-spec.js

118 lines
3.0 KiB
JavaScript

'use strict'
/* global
* describe, it, beforeEach, afterEach, expect, spyOn, waits, runs,
* waitsFor, loadFixtures, Waypoint, jasmine
*/
describe('Waypoint Sticky Shortcut', function() {
var $ = window.jQuery
var $scroller = $(window)
var $sticky, waypoint, handlerSpy
beforeEach(function() {
loadFixtures('sticky.html')
$sticky = $('.sticky')
})
describe('with default options', function() {
beforeEach(function() {
handlerSpy = jasmine.createSpy('on handler')
waypoint = new Waypoint.Sticky({
element: $sticky[0],
handler: handlerSpy
})
})
afterEach(function() {
if (waypoint) {
waypoint.destroy()
}
$scroller.scrollTop(0)
})
describe('on init', function() {
afterEach(function() {
waypoint.destroy()
})
it('returns an instance of the Waypoint.Sticky class', function() {
expect(waypoint instanceof Waypoint.Sticky).toBeTruthy()
})
it('wraps the sticky element on init', function() {
expect($sticky.parent()).toHaveClass('sticky-wrapper')
})
describe('when sticky element is scrolled to', function() {
beforeEach(function() {
runs(function() {
$scroller.scrollTop($sticky.offset().top)
})
waitsFor(function() {
return $sticky.hasClass('stuck')
}, 'stuck class to apply')
})
it('adds/removes stuck class', function() {
runs(function() {
$scroller.scrollTop($scroller.scrollTop() - 1)
})
waitsFor(function() {
return !$sticky.hasClass('stuck')
})
})
it('gives the wrapper the same height as the sticky element', function() {
expect($sticky.parent().height()).toEqual($sticky.outerHeight())
})
it('executes handler option after stuck class applied', function() {
expect(handlerSpy).toHaveBeenCalled()
})
})
})
describe('#destroy', function() {
beforeEach(function() {
runs(function() {
$scroller.scrollTop($sticky.offset().top)
})
waitsFor(function() {
return handlerSpy.callCount
})
runs(function() {
waypoint.destroy()
})
})
it('unwraps the sticky element', function() {
expect($sticky.parent()).not.toHaveClass('sticky-wrapper')
})
it('removes the stuck class', function() {
expect($sticky).not.toHaveClass('stuck')
})
})
})
describe('with wrapper false', function() {
beforeEach(function() {
waypoint = new Waypoint.Sticky({
element: $sticky[0],
handler: handlerSpy,
wrapper: false
})
})
it('does not wrap the sticky element', function() {
expect($sticky.parent()).not.toHaveClass('sticky-wrapper')
})
it('does not unwrap on destroy', function() {
var parent = waypoint.wrapper
waypoint.destroy()
expect(parent).toBe(waypoint.wrapper)
})
})
})