slider.spec.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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('hide tooltip', () => {
  59. vm = createVue({
  60. template: `
  61. <div>
  62. <el-slider v-model="value" :show-tooltip="false">
  63. </el-slider>
  64. </div>
  65. `,
  66. data() {
  67. return {
  68. value: 0
  69. };
  70. }
  71. }, true);
  72. const slider = vm.$children[0].$children[0];
  73. expect(slider.$refs.tooltip.disabled).to.true;
  74. });
  75. it('drag', done => {
  76. vm = createVue({
  77. template: `
  78. <div>
  79. <el-slider v-model="value"></el-slider>
  80. </div>
  81. `,
  82. data() {
  83. return {
  84. value: 0
  85. };
  86. }
  87. }, true);
  88. const slider = vm.$children[0].$children[0];
  89. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  90. slider.onDragging({ clientX: 100 });
  91. slider.onDragEnd();
  92. setTimeout(() => {
  93. expect(vm.value > 0).to.true;
  94. done();
  95. }, 10);
  96. });
  97. it('step', done => {
  98. vm = createVue({
  99. template: `
  100. <div style="width: 200px;">
  101. <el-slider v-model="value" :min="0" :max="1" :step="0.1"></el-slider>
  102. </div>
  103. `,
  104. data() {
  105. return {
  106. value: 0
  107. };
  108. }
  109. }, true);
  110. const slider = vm.$children[0].$children[0];
  111. slider.onButtonDown({ clientX: 0, preventDefault() {} });
  112. slider.onDragging({ clientX: 100 });
  113. slider.onDragEnd();
  114. setTimeout(() => {
  115. expect(vm.value > 0.4 && vm.value < 0.6).to.true;
  116. done();
  117. }, 10);
  118. });
  119. it('click', done => {
  120. vm = createVue({
  121. template: `
  122. <div>
  123. <el-slider v-model="value"></el-slider>
  124. </div>
  125. `,
  126. data() {
  127. return {
  128. value: 0
  129. };
  130. }
  131. }, true);
  132. const slider = vm.$children[0];
  133. setTimeout(() => {
  134. slider.onSliderClick({ clientX: 100 });
  135. setTimeout(() => {
  136. expect(vm.value > 0).to.true;
  137. done();
  138. }, 10);
  139. }, 10);
  140. });
  141. it('disabled', done => {
  142. vm = createVue({
  143. template: `
  144. <div>
  145. <el-slider v-model="value" disabled></el-slider>
  146. </div>
  147. `,
  148. data() {
  149. return {
  150. value: 0
  151. };
  152. }
  153. }, true);
  154. const slider = vm.$children[0].$children[0];
  155. slider.onButtonDown({ clientX: 0 });
  156. slider.onDragging({ clientX: 100 });
  157. slider.onDragEnd();
  158. setTimeout(() => {
  159. expect(vm.value).to.equal(0);
  160. done();
  161. }, 10);
  162. });
  163. it('show input', done => {
  164. vm = createVue({
  165. template: `
  166. <div>
  167. <el-slider v-model="value" show-input></el-slider>
  168. </div>
  169. `,
  170. data() {
  171. return {
  172. value: 0
  173. };
  174. }
  175. }, true);
  176. setTimeout(() => {
  177. triggerEvent(vm.$el.querySelector('.el-input-number'), 'keyup');
  178. const inputNumber = vm.$el.querySelector('.el-input-number').__vue__;
  179. inputNumber.setCurrentValue(40);
  180. setTimeout(() => {
  181. expect(vm.value).to.equal(40);
  182. done();
  183. }, 10);
  184. }, 10);
  185. });
  186. it('show stops', () => {
  187. vm = createTest(Slider, {
  188. showStops: true,
  189. step: 10
  190. }, true);
  191. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  192. expect(stops.length).to.equal(9);
  193. });
  194. describe('range', () => {
  195. it('basic ranged slider', () => {
  196. vm = createVue({
  197. template: `
  198. <div>
  199. <el-slider v-model="value" range></el-slider>
  200. </div>
  201. `,
  202. data() {
  203. return {
  204. value: [10, 20]
  205. };
  206. }
  207. }, true);
  208. const buttons = vm.$children[0].$children;
  209. expect(buttons.length).to.equal(2);
  210. });
  211. it('should not exceed min and max', done => {
  212. vm = createVue({
  213. template: `
  214. <div>
  215. <el-slider v-model="value" range :min="50">
  216. </el-slider>
  217. </div>
  218. `,
  219. data() {
  220. return {
  221. value: [50, 60]
  222. };
  223. }
  224. }, true);
  225. setTimeout(() => {
  226. vm.value = [40, 60];
  227. setTimeout(() => {
  228. expect(vm.value).to.deep.equal([50, 60]);
  229. vm.value = [50, 120];
  230. setTimeout(() => {
  231. expect(vm.value).to.deep.equal([50, 100]);
  232. done();
  233. }, 10);
  234. }, 10);
  235. }, 10);
  236. });
  237. it('click', done => {
  238. vm = createVue({
  239. template: `
  240. <div style="width: 200px;">
  241. <el-slider range v-model="value"></el-slider>
  242. </div>
  243. `,
  244. data() {
  245. return {
  246. value: [0, 100]
  247. };
  248. }
  249. }, true);
  250. const slider = vm.$children[0];
  251. setTimeout(() => {
  252. slider.onSliderClick({ clientX: 100 });
  253. setTimeout(() => {
  254. expect(vm.value[0] > 0).to.true;
  255. expect(vm.value[1]).to.equal(100);
  256. done();
  257. }, 10);
  258. }, 10);
  259. });
  260. it('responsive to dynamic min and max', done => {
  261. vm = createVue({
  262. template: `
  263. <div>
  264. <el-slider v-model="value" range :min="min" :max="max">
  265. </el-slider>
  266. </div>
  267. `,
  268. data() {
  269. return {
  270. min: 0,
  271. max: 100,
  272. value: [50, 80]
  273. };
  274. }
  275. }, true);
  276. setTimeout(() => {
  277. vm.min = 60;
  278. setTimeout(() => {
  279. expect(vm.value).to.deep.equal([60, 80]);
  280. vm.min = 30;
  281. vm.max = 40;
  282. setTimeout(() => {
  283. expect(vm.value).to.deep.equal([40, 40]);
  284. done();
  285. }, 10);
  286. }, 10);
  287. }, 10);
  288. });
  289. it('show stops', done => {
  290. vm = createVue({
  291. template: `
  292. <div>
  293. <el-slider
  294. v-model="value"
  295. range
  296. :step="10"
  297. show-stops></el-slider>
  298. </div>
  299. `,
  300. data() {
  301. return {
  302. value: [30, 60]
  303. };
  304. }
  305. }, true);
  306. setTimeout(() => {
  307. const stops = vm.$el.querySelectorAll('.el-slider__stop');
  308. expect(stops.length).to.equal(5);
  309. done();
  310. }, 10);
  311. });
  312. });
  313. });