carousel.spec.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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 :autoplay="false" :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('change', done => {
  78. vm = createVue({
  79. template: `
  80. <div>
  81. <el-carousel :interval="50" @change="handleChange">
  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. handleChange(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 :autoplay="false">
  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].throttledIndicatorHover(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 :autoplay="false" 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--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. describe('methods', () => {
  149. it('setActiveItem', done => {
  150. vm = createVue({
  151. template: `
  152. <div>
  153. <el-carousel :autoplay="false">
  154. <el-carousel-item v-for="item in 3"></el-carousel-item>
  155. </el-carousel>
  156. </div>
  157. `
  158. });
  159. setTimeout(() => {
  160. vm.$children[0].setActiveItem(1);
  161. setTimeout(() => {
  162. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  163. done();
  164. }, 10);
  165. }, 10);
  166. });
  167. it('slide', done => {
  168. vm = createVue({
  169. template: `
  170. <div>
  171. <el-carousel :autoplay="false">
  172. <el-carousel-item v-for="item in 3"></el-carousel-item>
  173. </el-carousel>
  174. </div>
  175. `
  176. });
  177. setTimeout(() => {
  178. vm.$children[0].prev(1);
  179. const items = vm.$el.querySelectorAll('.el-carousel__item');
  180. setTimeout(() => {
  181. expect(items[2].classList.contains('is-active')).to.true;
  182. vm.$children[0].next(1);
  183. setTimeout(() => {
  184. expect(items[0].classList.contains('is-active')).to.true;
  185. done();
  186. }, 10);
  187. }, 10);
  188. }, 10);
  189. });
  190. });
  191. it('card', done => {
  192. vm = createVue({
  193. template: `
  194. <div>
  195. <el-carousel :autoplay="false" type="card">
  196. <el-carousel-item v-for="item in 7"></el-carousel-item>
  197. </el-carousel>
  198. </div>
  199. `
  200. });
  201. setTimeout(() => {
  202. const items = vm.$el.querySelectorAll('.el-carousel__item');
  203. expect(items[0].classList.contains('is-active')).to.true;
  204. expect(items[1].classList.contains('is-in-stage')).to.true;
  205. expect(items[6].classList.contains('is-in-stage')).to.true;
  206. items[1].click();
  207. setTimeout(() => {
  208. expect(items[1].classList.contains('is-active')).to.true;
  209. vm.$el.querySelector('.el-carousel__arrow--left').click();
  210. setTimeout(() => {
  211. expect(items[0].classList.contains('is-active')).to.true;
  212. items[6].click();
  213. setTimeout(() => {
  214. expect(items[6].classList.contains('is-active')).to.true;
  215. done();
  216. }, 10);
  217. }, 10);
  218. }, 10);
  219. }, 10);
  220. });
  221. });