time-picker.spec.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. import { createTest, destroyVM, createVue } from '../util';
  2. import TimePicker from 'packages/time-picker';
  3. import Vue from 'vue';
  4. describe('TimePicker', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', () => {
  10. vm = createTest(TimePicker, {
  11. placeholder: 'test',
  12. readonly: true
  13. });
  14. expect(vm.$el.querySelector('input').getAttribute('placeholder')).to.equal('test');
  15. expect(vm.$el.querySelector('input').getAttribute('readonly')).to.ok;
  16. destroyVM(vm);
  17. });
  18. it('format', () => {
  19. vm = createTest(TimePicker, {
  20. format: 'HH-mm-ss',
  21. value: new Date(2016, 9, 10, 18, 40)
  22. });
  23. expect(vm.$el.querySelector('input').value).to.equal('18-40-00');
  24. destroyVM(vm);
  25. });
  26. it('default value', done => {
  27. vm = createTest(TimePicker, {
  28. value: new Date(2016, 9, 10, 18, 40)
  29. }, true);
  30. const input = vm.$el.querySelector('input');
  31. input.blur();
  32. input.focus();
  33. input.blur();
  34. Vue.nextTick(_ => {
  35. const times = vm.picker.$el.querySelectorAll('.active');
  36. expect(times[0].textContent).to.equal('18');
  37. expect(times[1].textContent).to.equal('40');
  38. expect(times[2].textContent).to.equal('0');
  39. destroyVM(vm);
  40. done();
  41. });
  42. });
  43. it('select time', done => {
  44. vm = createTest(TimePicker, true);
  45. const input = vm.$el.querySelector('input');
  46. input.blur();
  47. input.focus();
  48. Vue.nextTick(_ => {
  49. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  50. const hoursEl = list[0];
  51. const minutesEl = list[1];
  52. const secondsEl = list[2];
  53. const hourEl = hoursEl.querySelectorAll('.el-time-spinner__item')[4];
  54. const minuteEl = minutesEl.querySelectorAll('.el-time-spinner__item')[36];
  55. const secondEl = secondsEl.querySelectorAll('.el-time-spinner__item')[20];
  56. hourEl.click();
  57. minuteEl.click();
  58. secondEl.click();
  59. Vue.nextTick(_ => {
  60. const date = vm.picker.currentDate;
  61. expect(hourEl.classList.contains('active')).to.true;
  62. expect(minuteEl.classList.contains('active')).to.true;
  63. expect(secondEl.classList.contains('active')).to.true;
  64. expect(date.getHours()).to.equal(4);
  65. expect(date.getMinutes()).to.equal(36);
  66. expect(date.getSeconds()).to.equal(20);
  67. destroyVM(vm);
  68. done();
  69. });
  70. });
  71. });
  72. it('click cancel button', done => {
  73. vm = createTest(TimePicker, true);
  74. const input = vm.$el.querySelector('input');
  75. input.blur();
  76. input.focus();
  77. Vue.nextTick(_ => {
  78. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  79. Vue.nextTick(_ => {
  80. expect(vm.picker.currentDate).to.empty;
  81. done();
  82. });
  83. });
  84. });
  85. it('click confirm button', done => {
  86. vm = createTest(TimePicker, true);
  87. const input = vm.$el.querySelector('input');
  88. input.blur();
  89. input.focus();
  90. Vue.nextTick(_ => {
  91. vm.picker.$el.querySelector('.el-time-panel__btn.confirm').click();
  92. Vue.nextTick(_ => {
  93. expect(vm.picker.currentDate).to.exist;
  94. done();
  95. });
  96. });
  97. });
  98. it('set format', done => {
  99. vm = createTest(TimePicker, {
  100. pickerOptions: {
  101. format: 'HH:mm'
  102. }
  103. }, true);
  104. const input = vm.$el.querySelector('input');
  105. input.blur();
  106. input.focus();
  107. setTimeout(_ => {
  108. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  109. destroyVM(vm);
  110. done();
  111. }, 20);
  112. });
  113. it('set format to empty', done => {
  114. vm = createTest(TimePicker, {
  115. pickerOptions: {
  116. format: ''
  117. }
  118. }, true);
  119. const input = vm.$el.querySelector('input');
  120. input.blur();
  121. input.focus();
  122. setTimeout(_ => {
  123. expect(vm.picker.$el.querySelectorAll('.el-time-spinner__wrapper')[2].style.display).to.equal('none');
  124. destroyVM(vm);
  125. done();
  126. }, 20);
  127. });
  128. it('selectableRange', done => {
  129. vm = createTest(TimePicker, {
  130. pickerOptions: {
  131. selectableRange: '18:30:00 - 20:30:00'
  132. }
  133. }, true);
  134. const input = vm.$el.querySelector('input');
  135. input.blur();
  136. input.focus();
  137. setTimeout(_ => {
  138. const list = vm.picker.$el.querySelectorAll('.el-time-spinner__list');
  139. const hoursEl = list[0];
  140. const disabledHours = [].slice
  141. .call(hoursEl.querySelectorAll('.disabled'))
  142. .map(node => Number(node.textContent));
  143. hoursEl.querySelectorAll('.disabled')[0].click();
  144. expect(disabledHours).to.not.include.members([18, 19, 20]);
  145. destroyVM(vm);
  146. done();
  147. }, 20);
  148. });
  149. it('event focus and blur', done => {
  150. vm = createVue({
  151. template: `
  152. <el-date-picker
  153. type="date"
  154. placeholder="选择日期"
  155. ref="picker">
  156. </el-date-picker>
  157. `
  158. }, true);
  159. const spyFocus = sinon.spy();
  160. const spyBlur = sinon.spy();
  161. vm.$refs.picker.$on('focus', spyFocus);
  162. vm.$refs.picker.$on('blur', spyBlur);
  163. vm.$el.querySelector('input').focus();
  164. vm.$el.querySelector('input').blur();
  165. vm.$nextTick(_ => {
  166. expect(spyFocus.calledOnce).to.be.true;
  167. expect(spyBlur.calledOnce).to.be.true;
  168. done();
  169. });
  170. });
  171. });
  172. describe('TimePicker(range)', () => {
  173. let vm;
  174. beforeEach(done => {
  175. vm = createTest(TimePicker, {
  176. isRange: true,
  177. value: [new Date(2016, 9, 10, 18, 40), new Date(2016, 9, 10, 19, 40)]
  178. }, true);
  179. const input = vm.$el.querySelector('input');
  180. input.blur();
  181. input.focus();
  182. input.blur();
  183. setTimeout(done, 20);
  184. });
  185. afterEach(() => destroyVM(vm));
  186. it('create', () => {
  187. expect(vm.picker.$el.querySelectorAll('.el-time-range-picker__cell')).to.length(2);
  188. });
  189. it('default value', () => {
  190. expect(vm.picker.minTime.getTime()).to.equal(new Date(2016, 9, 10, 18, 40).getTime());
  191. expect(vm.picker.maxTime.getTime()).to.equal(new Date(2016, 9, 10, 19, 40).getTime());
  192. });
  193. it('minTime < maxTime', done => {
  194. const vm2 = createTest(TimePicker, {
  195. isRange: true,
  196. value: [new Date(2016, 9, 10, 23, 40), new Date(2016, 9, 10, 10, 40)]
  197. }, true);
  198. const input = vm2.$el.querySelector('input');
  199. input.blur();
  200. input.focus();
  201. input.blur();
  202. setTimeout(() => {
  203. expect(vm2.picker.maxTime >= vm2.picker.minTime).to.true;
  204. destroyVM(vm2);
  205. done();
  206. }, 100);
  207. });
  208. it('click cancel button', done => {
  209. vm.picker.$el.querySelector('.el-time-panel__btn.cancel').click();
  210. Vue.nextTick(_ => {
  211. expect(vm.picker.currentDate).to.empty;
  212. done();
  213. });
  214. });
  215. });