carousel.spec.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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" :key="item"></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" :key="item"></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" :key="item"></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" :key="item"></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" :key="item"></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. }, 60);
  104. });
  105. it('label', done => {
  106. vm = createVue({
  107. template: `
  108. <div>
  109. <el-carousel>
  110. <el-carousel-item v-for="item in 3" :key="item" :label="item"></el-carousel-item>
  111. </el-carousel>
  112. </div>
  113. `
  114. });
  115. setTimeout(_ => {
  116. expect(vm.$el.querySelector('.el-carousel__button').innerText).to.equal('1');
  117. done();
  118. }, 10);
  119. });
  120. describe('manual control', () => {
  121. it('hover', done => {
  122. vm = createVue({
  123. template: `
  124. <div>
  125. <el-carousel :autoplay="false">
  126. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  127. </el-carousel>
  128. </div>
  129. `
  130. });
  131. setTimeout(() => {
  132. vm.$children[0].throttledIndicatorHover(1);
  133. setTimeout(() => {
  134. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  135. done();
  136. }, 10);
  137. }, 10);
  138. });
  139. it('click', done => {
  140. vm = createVue({
  141. template: `
  142. <div>
  143. <el-carousel :autoplay="false" trigger="click" ref="carousel">
  144. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  145. </el-carousel>
  146. </div>
  147. `
  148. });
  149. setTimeout(() => {
  150. const items = vm.$el.querySelectorAll('.el-carousel__item');
  151. const carousel = vm.$refs.carousel;
  152. vm.$el.querySelectorAll('.el-carousel__indicator')[2].click();
  153. setTimeout(() => {
  154. expect(items[2].classList.contains('is-active')).to.true;
  155. carousel.handleButtonEnter('right');
  156. vm.$el.querySelector('.el-carousel__arrow--right').click();
  157. setTimeout(() => {
  158. expect(items[0].classList.contains('is-active')).to.true;
  159. done();
  160. }, 10);
  161. }, 10);
  162. }, 10);
  163. });
  164. });
  165. describe('methods', () => {
  166. it('setActiveItem', done => {
  167. vm = createVue({
  168. template: `
  169. <div>
  170. <el-carousel :autoplay="false">
  171. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  172. </el-carousel>
  173. </div>
  174. `
  175. });
  176. setTimeout(() => {
  177. vm.$children[0].setActiveItem(1);
  178. setTimeout(() => {
  179. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  180. done();
  181. }, 10);
  182. }, 10);
  183. });
  184. it('slide', done => {
  185. vm = createVue({
  186. template: `
  187. <div>
  188. <el-carousel :autoplay="false">
  189. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  190. </el-carousel>
  191. </div>
  192. `
  193. });
  194. setTimeout(() => {
  195. vm.$children[0].prev(1);
  196. const items = vm.$el.querySelectorAll('.el-carousel__item');
  197. setTimeout(() => {
  198. expect(items[2].classList.contains('is-active')).to.true;
  199. vm.$children[0].next(1);
  200. setTimeout(() => {
  201. expect(items[0].classList.contains('is-active')).to.true;
  202. done();
  203. }, 10);
  204. }, 10);
  205. }, 10);
  206. });
  207. });
  208. it('card', done => {
  209. vm = createVue({
  210. template: `
  211. <div>
  212. <el-carousel :autoplay="false" type="card">
  213. <el-carousel-item v-for="item in 7" :key="item"></el-carousel-item>
  214. </el-carousel>
  215. </div>
  216. `
  217. });
  218. setTimeout(() => {
  219. const items = vm.$el.querySelectorAll('.el-carousel__item');
  220. expect(items[0].classList.contains('is-active')).to.true;
  221. expect(items[1].classList.contains('is-in-stage')).to.true;
  222. expect(items[6].classList.contains('is-in-stage')).to.true;
  223. items[1].click();
  224. setTimeout(() => {
  225. expect(items[1].classList.contains('is-active')).to.true;
  226. vm.$el.querySelector('.el-carousel__arrow--left').click();
  227. setTimeout(() => {
  228. expect(items[0].classList.contains('is-active')).to.true;
  229. items[6].click();
  230. setTimeout(() => {
  231. expect(items[6].classList.contains('is-active')).to.true;
  232. done();
  233. }, 10);
  234. }, 10);
  235. }, 10);
  236. }, 10);
  237. });
  238. });