slider.spec.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. import { createTest, createVue, triggerEvent, destroyVM } from '../util';
  2. import Slider from 'packages/slider';
  3. describe('Slider', () => {
  4. let vm;
  5. afterEach(() => {
  6. destroyVM(vm);
  7. });
  8. it('create', () => {
  9. vm = createTest(Slider);
  10. expect(vm.value).to.equal(0);
  11. });
  12. it('should not exceed min and max', done => {
  13. vm = createVue({
  14. template: `
  15. <div>
  16. <el-slider v-model="value" :min="50">
  17. </el-slider>
  18. </div>
  19. `,
  20. data() {
  21. return {
  22. value: 50
  23. };
  24. }
  25. }, true);
  26. setTimeout(() => {
  27. vm.value = 40;
  28. vm.$nextTick(() => {
  29. expect(vm.value).to.equal(50);
  30. vm.value = 120;
  31. vm.$nextTick(() => {
  32. expect(vm.value).to.equal(100);
  33. done();
  34. });
  35. });
  36. }, 10);
  37. });
  38. it('show tooltip', () => {
  39. vm = createVue({
  40. template: `
  41. <div>
  42. <el-slider v-model="value">
  43. </el-slider>
  44. </div>
  45. `,
  46. data() {
  47. return {
  48. value: 0
  49. };
  50. }
  51. }, true);
  52. const slider = vm.$children[0].$children[0];
  53. slider.handleMouseEnter();
  54. expect(slider.$refs.tooltip.showPopper).to.true;
  55. slider.handleMouseLeave();
  56. expect(slider.$refs.tooltip.showPopper).to.false;
  57. });
  58. it('drag', done => {
  59. vm = createVue({
  60. template: `
  61. <div>
  62. <el-slider v-model="value"></el-slider>
  63. </div>
  64. `,
  65. data() {
  66. return {
  67. value: 0
  68. };
  69. }
  70. }, true);
  71. const slider = vm.$children[0].$children[0];
  72. slider.onButtonDown({ clientX: 0 });
  73. slider.onDragging({ clientX: 100 });
  74. slider.onDragEnd();
  75. setTimeout(() => {
  76. expect(vm.value > 0).to.true;
  77. done();
  78. }, 10);
  79. });
  80. it('step', done => {
  81. vm = createVue({
  82. template: `
  83. <div style="width: 200px;">
  84. <el-slider v-model="value" :min="0" :max="1" :step="0.1"></el-slider>
  85. </div>
  86. `,
  87. data() {
  88. return {
  89. value: 0
  90. };
  91. }
  92. }, true);
  93. const slider = vm.$children[0].$children[0];
  94. slider.onButtonDown({ clientX: 0 });
  95. slider.onDragging({ clientX: 100 });
  96. slider.onDragEnd();
  97. setTimeout(() => {
  98. expect(vm.value > 0.4 && vm.value < 0.6).to.true;
  99. done();
  100. }, 10);
  101. });
  102. it('click', done => {
  103. vm = createVue({
  104. template: `
  105. <div>
  106. <el-slider v-model="value"></el-slider>
  107. </div>
  108. `,
  109. data() {
  110. return {
  111. value: 0
  112. };
  113. }
  114. }, true);
  115. const slider = vm.$children[0];
  116. setTimeout(() => {
  117. slider.onSliderClick({ clientX: 100 });
  118. setTimeout(() => {
  119. expect(vm.value > 0).to.true;
  120. done();
  121. }, 10);
  122. }, 10);
  123. });
  124. it('disabled', done => {
  125. vm = createVue({
  126. template: `
  127. <div>
  128. <el-slider v-model="value" disabled></el-slider>
  129. </div>
  130. `,
  131. data() {
  132. return {
  133. value: 0
  134. };
  135. }
  136. }, true);
  137. const slider = vm.$children[0].$children[0];
  138. slider.onButtonDown({ clientX: 0 });
  139. slider.onDragging({ clientX: 100 });
  140. slider.onDragEnd();
  141. setTimeout(() => {
  142. expect(vm.value).to.equal(0);
  143. done();
  144. }, 10);
  145. });
  146. it('show input', done => {
  147. vm = createVue({
  148. template: `
  149. <div>
  150. <el-slider v-model="value" show-input></el-slider>
  151. </div>
  152. `,
  153. data() {
  154. return {
  155. value: 0
  156. };
  157. }
  158. }, true);
  159. setTimeout(() => {
  160. triggerEvent(vm.$el.querySelector('.el-input-number'), 'keyup');
  161. const inputNumber = vm.$el.querySelector('.el-input-number').__vue__;
  162. inputNumber.setCurrentValue(40);
  163. setTimeout(() => {
  164. expect(vm.value).to.equal(40);
  165. done();
  166. }, 10);
  167. }, 10);
  168. });
  169. it('show stops', () => {
  170. vm = createTest(Slider, {
  171. showStops: true,
  172. step: 10
  173. }, true);
  174. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  175. expect(stops.length).to.equal(9);
  176. });
  177. describe('range', () => {
  178. it('basic ranged slider', () => {
  179. vm = createVue({
  180. template: `
  181. <div>
  182. <el-slider v-model="value" range></el-slider>
  183. </div>
  184. `,
  185. data() {
  186. return {
  187. value: [10, 20]
  188. };
  189. }
  190. }, true);
  191. const buttons = vm.$children[0].$children;
  192. expect(buttons.length).to.equal(2);
  193. });
  194. it('should not exceed min and max', done => {
  195. vm = createVue({
  196. template: `
  197. <div>
  198. <el-slider v-model="value" range :min="50">
  199. </el-slider>
  200. </div>
  201. `,
  202. data() {
  203. return {
  204. value: [50, 60]
  205. };
  206. }
  207. }, true);
  208. setTimeout(() => {
  209. vm.value = [40, 60];
  210. setTimeout(() => {
  211. expect(vm.value).to.deep.equal([50, 60]);
  212. vm.value = [50, 120];
  213. setTimeout(() => {
  214. expect(vm.value).to.deep.equal([50, 100]);
  215. done();
  216. }, 10);
  217. }, 10);
  218. }, 10);
  219. });
  220. it('click', done => {
  221. vm = createVue({
  222. template: `
  223. <div style="width: 200px;">
  224. <el-slider range v-model="value"></el-slider>
  225. </div>
  226. `,
  227. data() {
  228. return {
  229. value: [0, 100]
  230. };
  231. }
  232. }, true);
  233. const slider = vm.$children[0];
  234. setTimeout(() => {
  235. slider.onSliderClick({ clientX: 100 });
  236. setTimeout(() => {
  237. expect(vm.value[0] > 0).to.true;
  238. expect(vm.value[1]).to.equal(100);
  239. done();
  240. }, 10);
  241. }, 10);
  242. });
  243. it('responsive to dynamic min and max', done => {
  244. vm = createVue({
  245. template: `
  246. <div>
  247. <el-slider v-model="value" range :min="min" :max="max">
  248. </el-slider>
  249. </div>
  250. `,
  251. data() {
  252. return {
  253. min: 0,
  254. max: 100,
  255. value: [50, 80]
  256. };
  257. }
  258. }, true);
  259. setTimeout(() => {
  260. vm.min = 60;
  261. setTimeout(() => {
  262. expect(vm.value).to.deep.equal([60, 80]);
  263. vm.min = 30;
  264. vm.max = 40;
  265. setTimeout(() => {
  266. expect(vm.value).to.deep.equal([40, 40]);
  267. done();
  268. }, 10);
  269. }, 10);
  270. }, 10);
  271. });
  272. it('show stops', done => {
  273. vm = createVue({
  274. template: `
  275. <div>
  276. <el-slider
  277. v-model="value"
  278. range
  279. :step="10"
  280. show-stops></el-slider>
  281. </div>
  282. `,
  283. data() {
  284. return {
  285. value: [30, 60]
  286. };
  287. }
  288. }, true);
  289. setTimeout(() => {
  290. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  291. expect(stops.length).to.equal(5);
  292. done();
  293. }, 10);
  294. });
  295. });
  296. });