loop.test.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { minimum } from '../data/html';
  2. import Splide from '../../src/js/splide';
  3. import { COMPLETE } from '../../src/js/components';
  4. describe( 'The "loop" type Splide', () => {
  5. let splide;
  6. const width = 800;
  7. beforeEach( () => {
  8. document.body.innerHTML = minimum;
  9. splide = new Splide( '#splide', { type: 'loop' }, COMPLETE ).mount();
  10. // Set up the getBoundingClientRect.
  11. splide.Components.Elements.getSlides( true ).forEach( Slide => {
  12. Slide.slide.getBoundingClientRect = jest.fn( () => ( {
  13. right: width * ( Slide.index + 1 + splide.Components.Clones.length / 2 ),
  14. } ) );
  15. } );
  16. } );
  17. test( 'should activate a Clones component and yield clone slides', () => {
  18. const Clones = splide.Components.Clones;
  19. expect( Clones.length ).toBeGreaterThan( 0 );
  20. } );
  21. test( 'should init track position according to length of clones.', () => {
  22. const { Track, Clones, Elements } = splide.Components;
  23. Object.defineProperty( Elements.track, 'clientWidth', { value: width } );
  24. global.dispatchEvent( new Event( 'resize' ) );
  25. expect( Math.abs( Track.toPosition( 0 ) ) ).toBe( width * Clones.length / 2 );
  26. } );
  27. test( 'should move to clones before the first slide or after the last one then jump to actual slide.', done => {
  28. splide.on( 'move', ( newIndex, prevIndex, destIndex ) => {
  29. expect( newIndex ).toBe( 0 );
  30. expect( destIndex ).toBe( splide.length );
  31. } );
  32. splide.on( 'moved', ( newIndex, prevIndex, destIndex ) => {
  33. expect( newIndex ).toBe( 0 );
  34. expect( destIndex ).toBe( splide.length );
  35. expect( splide.index ).toBe( 0 );
  36. done();
  37. } );
  38. splide.go( splide.length );
  39. splide.Components.Elements.list.dispatchEvent( new Event( 'transitionend' ) );
  40. } );
  41. } );