carousel.spec.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import { createVue, destroyVM } from '../util';
  2. describe('Carousel', () => {
  3. let vm;
  4. afterEach(() => {
  5. destroyVM(vm);
  6. });
  7. it('create', () => {
  8. vm = createVue({
  9. template: `
  10. <div>
  11. <el-carousel>
  12. <el-carousel-item v-for="item in 3"></el-carousel-item>
  13. </el-carousel>
  14. </div>
  15. `
  16. });
  17. expect(vm.$el.querySelectorAll('.el-carousel__item').length).to.equal(3);
  18. });
  19. it('auto play', done => {
  20. vm = createVue({
  21. template: `
  22. <div>
  23. <el-carousel :interval="50">
  24. <el-carousel-item v-for="item in 3"></el-carousel-item>
  25. </el-carousel>
  26. </div>
  27. `
  28. });
  29. setTimeout(() => {
  30. const items = vm.$el.querySelectorAll('.el-carousel__item');
  31. expect(items[0].classList.contains('is-active')).to.true;
  32. setTimeout(() => {
  33. expect(items[1].classList.contains('is-active')).to.true;
  34. done();
  35. }, 60);
  36. }, 10);
  37. });
  38. it('initial index', done => {
  39. vm = createVue({
  40. template: `
  41. <div>
  42. <el-carousel :interval="0" :initial-index="1">
  43. <el-carousel-item v-for="item in 3"></el-carousel-item>
  44. </el-carousel>
  45. </div>
  46. `
  47. });
  48. setTimeout(() => {
  49. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  50. done();
  51. }, 10);
  52. });
  53. it('reset timer', done => {
  54. vm = createVue({
  55. template: `
  56. <div>
  57. <el-carousel :interval="20">
  58. <el-carousel-item v-for="item in 3"></el-carousel-item>
  59. </el-carousel>
  60. </div>
  61. `
  62. });
  63. setTimeout(() => {
  64. const carousel = vm.$children[0];
  65. const items = vm.$el.querySelectorAll('.el-carousel__item');
  66. carousel.handleMouseEnter();
  67. setTimeout(() => {
  68. expect(items[0].classList.contains('is-active')).to.true;
  69. carousel.handleMouseLeave();
  70. setTimeout(() => {
  71. expect(items[1].classList.contains('is-active')).to.true;
  72. done();
  73. }, 30);
  74. }, 20);
  75. }, 10);
  76. });
  77. it('index change', done => {
  78. vm = createVue({
  79. template: `
  80. <div>
  81. <el-carousel :interval="50" @index-change="handleIndexChange">
  82. <el-carousel-item v-for="item in 3"></el-carousel-item>
  83. </el-carousel>
  84. </div>
  85. `,
  86. data() {
  87. return {
  88. val: -1,
  89. oldVal: -1
  90. };
  91. },
  92. methods: {
  93. handleIndexChange(val, oldVal) {
  94. this.val = val;
  95. this.oldVal = oldVal;
  96. }
  97. }
  98. });
  99. setTimeout(() => {
  100. expect(vm.val).to.equal(1);
  101. expect(vm.oldVal).to.equal(0);
  102. done();
  103. }, 100);
  104. });
  105. describe('manual control', () => {
  106. it('hover', done => {
  107. vm = createVue({
  108. template: `
  109. <div>
  110. <el-carousel :interval="0">
  111. <el-carousel-item v-for="item in 3"></el-carousel-item>
  112. </el-carousel>
  113. </div>
  114. `
  115. });
  116. setTimeout(() => {
  117. vm.$children[0].handleIndicatorHover(1);
  118. setTimeout(() => {
  119. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  120. done();
  121. }, 10);
  122. }, 10);
  123. });
  124. it('click', done => {
  125. vm = createVue({
  126. template: `
  127. <div>
  128. <el-carousel :interval="0" trigger="click">
  129. <el-carousel-item v-for="item in 3"></el-carousel-item>
  130. </el-carousel>
  131. </div>
  132. `
  133. });
  134. setTimeout(() => {
  135. const items = vm.$el.querySelectorAll('.el-carousel__item');
  136. vm.$el.querySelectorAll('.el-carousel__indicator')[2].click();
  137. setTimeout(() => {
  138. expect(items[2].classList.contains('is-active')).to.true;
  139. vm.$el.querySelector('.el-carousel__arrow.is-right').click();
  140. setTimeout(() => {
  141. expect(items[0].classList.contains('is-active')).to.true;
  142. done();
  143. }, 10);
  144. }, 10);
  145. }, 10);
  146. });
  147. });
  148. it('card', done => {
  149. vm = createVue({
  150. template: `
  151. <div>
  152. <el-carousel :interval="0" card>
  153. <el-carousel-item v-for="item in 7"></el-carousel-item>
  154. </el-carousel>
  155. </div>
  156. `
  157. });
  158. setTimeout(() => {
  159. const items = vm.$el.querySelectorAll('.el-carousel__item');
  160. expect(items[0].classList.contains('is-active')).to.true;
  161. expect(items[1].classList.contains('is-in-stage')).to.true;
  162. expect(items[6].classList.contains('is-in-stage')).to.true;
  163. items[1].click();
  164. setTimeout(() => {
  165. expect(items[1].classList.contains('is-active')).to.true;
  166. vm.$el.querySelector('.el-carousel__arrow.is-left').click();
  167. setTimeout(() => {
  168. expect(items[0].classList.contains('is-active')).to.true;
  169. items[6].click();
  170. setTimeout(() => {
  171. expect(items[6].classList.contains('is-active')).to.true;
  172. done();
  173. }, 10);
  174. }, 10);
  175. }, 10);
  176. }, 10);
  177. });
  178. });