carousel.spec.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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 ref="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.$refs.carousel.direction).to.be.equal('horizontal');
  18. expect(vm.$el.querySelectorAll('.el-carousel__item').length).to.equal(3);
  19. });
  20. it('auto play', done => {
  21. vm = createVue({
  22. template: `
  23. <div>
  24. <el-carousel :interval="50">
  25. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  26. </el-carousel>
  27. </div>
  28. `
  29. });
  30. setTimeout(() => {
  31. const items = vm.$el.querySelectorAll('.el-carousel__item');
  32. expect(items[0].classList.contains('is-active')).to.true;
  33. setTimeout(() => {
  34. expect(items[1].classList.contains('is-active')).to.true;
  35. done();
  36. }, 60);
  37. }, 10);
  38. });
  39. it('initial index', done => {
  40. vm = createVue({
  41. template: `
  42. <div>
  43. <el-carousel :autoplay="false" :initial-index="1">
  44. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  45. </el-carousel>
  46. </div>
  47. `
  48. });
  49. setTimeout(() => {
  50. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  51. done();
  52. }, 10);
  53. });
  54. it('reset timer', done => {
  55. vm = createVue({
  56. template: `
  57. <div>
  58. <el-carousel :interval="20">
  59. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  60. </el-carousel>
  61. </div>
  62. `
  63. });
  64. setTimeout(() => {
  65. const carousel = vm.$children[0];
  66. const items = vm.$el.querySelectorAll('.el-carousel__item');
  67. carousel.handleMouseEnter();
  68. setTimeout(() => {
  69. expect(items[0].classList.contains('is-active')).to.true;
  70. carousel.handleMouseLeave();
  71. setTimeout(() => {
  72. expect(items[1].classList.contains('is-active')).to.true;
  73. done();
  74. }, 30);
  75. }, 20);
  76. }, 10);
  77. });
  78. it('change', done => {
  79. vm = createVue({
  80. template: `
  81. <div>
  82. <el-carousel :interval="50" @change="handleChange">
  83. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  84. </el-carousel>
  85. </div>
  86. `,
  87. data() {
  88. return {
  89. val: -1,
  90. oldVal: -1
  91. };
  92. },
  93. methods: {
  94. handleChange(val, oldVal) {
  95. this.val = val;
  96. this.oldVal = oldVal;
  97. }
  98. }
  99. });
  100. setTimeout(() => {
  101. expect(vm.val).to.equal(1);
  102. expect(vm.oldVal).to.equal(0);
  103. done();
  104. }, 60);
  105. });
  106. it('label', done => {
  107. vm = createVue({
  108. template: `
  109. <div>
  110. <el-carousel>
  111. <el-carousel-item v-for="item in 3" :key="item" :label="item"></el-carousel-item>
  112. </el-carousel>
  113. </div>
  114. `
  115. });
  116. setTimeout(_ => {
  117. expect(vm.$el.querySelector('.el-carousel__button').innerText).to.equal('1');
  118. done();
  119. }, 10);
  120. });
  121. describe('manual control', () => {
  122. it('hover', done => {
  123. vm = createVue({
  124. template: `
  125. <div>
  126. <el-carousel :autoplay="false">
  127. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  128. </el-carousel>
  129. </div>
  130. `
  131. });
  132. setTimeout(() => {
  133. vm.$children[0].throttledIndicatorHover(1);
  134. setTimeout(() => {
  135. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  136. done();
  137. }, 10);
  138. }, 10);
  139. });
  140. it('click', done => {
  141. vm = createVue({
  142. template: `
  143. <div>
  144. <el-carousel :autoplay="false" trigger="click" ref="carousel">
  145. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  146. </el-carousel>
  147. </div>
  148. `
  149. });
  150. setTimeout(() => {
  151. const items = vm.$el.querySelectorAll('.el-carousel__item');
  152. const carousel = vm.$refs.carousel;
  153. vm.$el.querySelectorAll('.el-carousel__indicator')[2].click();
  154. setTimeout(() => {
  155. expect(items[2].classList.contains('is-active')).to.true;
  156. carousel.handleButtonEnter('right');
  157. vm.$el.querySelector('.el-carousel__arrow--right').click();
  158. setTimeout(() => {
  159. expect(items[0].classList.contains('is-active')).to.true;
  160. done();
  161. }, 10);
  162. }, 10);
  163. }, 10);
  164. });
  165. });
  166. describe('methods', () => {
  167. it('setActiveItem', done => {
  168. vm = createVue({
  169. template: `
  170. <div>
  171. <el-carousel :autoplay="false">
  172. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  173. </el-carousel>
  174. </div>
  175. `
  176. });
  177. setTimeout(() => {
  178. vm.$children[0].setActiveItem(1);
  179. setTimeout(() => {
  180. expect(vm.$el.querySelectorAll('.el-carousel__item')[1].classList.contains('is-active')).to.true;
  181. done();
  182. }, 10);
  183. }, 10);
  184. });
  185. it('slide', done => {
  186. vm = createVue({
  187. template: `
  188. <div>
  189. <el-carousel :autoplay="false">
  190. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  191. </el-carousel>
  192. </div>
  193. `
  194. });
  195. setTimeout(() => {
  196. vm.$children[0].prev(1);
  197. const items = vm.$el.querySelectorAll('.el-carousel__item');
  198. setTimeout(() => {
  199. expect(items[2].classList.contains('is-active')).to.true;
  200. vm.$children[0].next(1);
  201. setTimeout(() => {
  202. expect(items[0].classList.contains('is-active')).to.true;
  203. done();
  204. }, 10);
  205. }, 10);
  206. }, 10);
  207. });
  208. });
  209. it('card', done => {
  210. vm = createVue({
  211. template: `
  212. <div>
  213. <el-carousel :autoplay="false" type="card">
  214. <el-carousel-item v-for="item in 7" :key="item"></el-carousel-item>
  215. </el-carousel>
  216. </div>
  217. `
  218. });
  219. setTimeout(() => {
  220. const items = vm.$el.querySelectorAll('.el-carousel__item');
  221. expect(items[0].classList.contains('is-active')).to.true;
  222. expect(items[1].classList.contains('is-in-stage')).to.true;
  223. expect(items[6].classList.contains('is-in-stage')).to.true;
  224. items[1].click();
  225. setTimeout(() => {
  226. expect(items[1].classList.contains('is-active')).to.true;
  227. vm.$el.querySelector('.el-carousel__arrow--left').click();
  228. setTimeout(() => {
  229. expect(items[0].classList.contains('is-active')).to.true;
  230. items[6].click();
  231. setTimeout(() => {
  232. expect(items[6].classList.contains('is-active')).to.true;
  233. done();
  234. }, 10);
  235. }, 10);
  236. }, 10);
  237. }, 10);
  238. });
  239. it('vertical direction', () => {
  240. vm = createVue({
  241. template: `
  242. <div>
  243. <el-carousel ref="carousel" :autoplay="false" direction="vertical" height="100px">
  244. <el-carousel-item v-for="item in 3" :key="item"></el-carousel-item>
  245. </el-carousel>
  246. </div>
  247. `
  248. });
  249. const items = vm.$el.querySelectorAll('.el-carousel__item');
  250. expect(vm.$refs.carousel.direction).to.be.equal('vertical');
  251. expect(items[0].style.transform.indexOf('translateY') !== -1).to.be.true;
  252. });
  253. });