time-select.spec.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import { createTest, createVue, destroyVM } from '../util';
  2. import TimeSelect from 'packages/time-select';
  3. import Vue from 'vue';
  4. describe('TimeSelect', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('should render correct contents', done => {
  10. vm = createTest(TimeSelect, {
  11. pickerOptions: {
  12. start: '08:30',
  13. step: '00:15',
  14. end: '18:30'
  15. },
  16. placeholder: 'test'
  17. }, true);
  18. const input = vm.$el.querySelector('input');
  19. input.focus();
  20. input.blur();
  21. Vue.nextTick(_ => {
  22. expect(vm.picker.start).to.equal('08:30');
  23. expect(vm.picker.end).to.equal('18:30');
  24. expect(vm.picker.step).to.equal('00:15');
  25. expect(vm.$el.querySelector('input').getAttribute('placeholder')).to.equal('test');
  26. destroyVM(vm);
  27. done();
  28. });
  29. });
  30. it('select time', done => {
  31. vm = createVue({
  32. template: `
  33. <div>
  34. <el-time-select ref="compo" v-model="value">
  35. </el-time-select>
  36. </div>
  37. `,
  38. data() {
  39. return {
  40. value: ''
  41. };
  42. }
  43. }, true);
  44. const input = vm.$el.querySelector('input');
  45. input.focus();
  46. input.blur();
  47. Vue.nextTick(_ => {
  48. const items = vm.$refs.compo.picker.$el.querySelectorAll('.time-select-item');
  49. const target = items[4];
  50. const time = target.textContent;
  51. target.click();
  52. Vue.nextTick(_ => {
  53. expect(vm.value).to.equal(time);
  54. destroyVM(vm);
  55. done();
  56. });
  57. });
  58. });
  59. it('set default value', done => {
  60. vm = createTest(TimeSelect, {
  61. value: '14:30'
  62. }, true);
  63. const input = vm.$el.querySelector('input');
  64. input.focus();
  65. input.blur();
  66. setTimeout(_ => {
  67. expect(input.value).to.equal('14:30');
  68. expect(vm.picker.$el.querySelector('.selected')).to.be.ok;
  69. expect(vm.picker.$el.querySelector('.selected').textContent).to.equal('14:30');
  70. destroyVM(vm);
  71. done();
  72. }, 50);
  73. });
  74. it('set minTime', done => {
  75. vm = createVue(`
  76. <el-time-select
  77. ref="picker"
  78. :picker-options="{
  79. minTime: '14:30'
  80. }">
  81. </el-time-select>
  82. `, true);
  83. const input = vm.$el.querySelector('input');
  84. const picker = vm.$refs.picker;
  85. input.focus();
  86. input.blur();
  87. setTimeout(_ => {
  88. const elms = picker.picker.$el.querySelectorAll('.disabled');
  89. const elm = elms[elms.length - 1];
  90. expect(elm.textContent).to.equal('14:30');
  91. destroyVM(vm);
  92. done();
  93. }, 50);
  94. });
  95. it('minTime < value', done => {
  96. vm = createVue({
  97. template: `
  98. <el-time-select
  99. ref="picker"
  100. v-model="value"
  101. :picker-options="{
  102. minTime: '14:30'
  103. }">
  104. </el-time-select>
  105. `,
  106. data() {
  107. return { value: '09:30' };
  108. }
  109. }, true);
  110. const input = vm.$el.querySelector('input');
  111. const picker = vm.$refs.picker;
  112. input.focus();
  113. input.blur();
  114. setTimeout(_ => {
  115. vm.value = '10:30';
  116. setTimeout(_ => {
  117. expect(picker.picker.value).to.equal('09:30');
  118. destroyVM(vm);
  119. done();
  120. }, 50);
  121. }, 50);
  122. });
  123. it('set maxTime', done => {
  124. vm = createVue(`
  125. <el-time-select
  126. ref="picker"
  127. :picker-options="{
  128. maxTime: '14:30',
  129. step: '00:30'
  130. }">
  131. </el-time-select>
  132. `, true);
  133. const input = vm.$el.querySelector('input');
  134. const picker = vm.$refs.picker;
  135. input.focus();
  136. input.blur();
  137. setTimeout(_ => {
  138. const elm = picker.picker.$el.querySelector('.disabled');
  139. expect(elm.textContent).to.equal('14:30');
  140. destroyVM(vm);
  141. done();
  142. }, 50);
  143. });
  144. it('maxTime > value', done => {
  145. vm = createVue({
  146. template: `
  147. <el-time-select
  148. ref="picker"
  149. v-model="value"
  150. :picker-options="{
  151. maxTime: '14:30'
  152. }">
  153. </el-time-select>
  154. `,
  155. data() {
  156. return { value: '09:30' };
  157. }
  158. }, true);
  159. const input = vm.$el.querySelector('input');
  160. const picker = vm.$refs.picker;
  161. input.focus();
  162. input.blur();
  163. setTimeout(_ => {
  164. vm.value = '10:30';
  165. setTimeout(_ => {
  166. expect(picker.picker.value).to.equal('09:30');
  167. destroyVM(vm);
  168. done();
  169. }, 50);
  170. }, 50);
  171. });
  172. it('event focus and blur', done => {
  173. vm = createVue({
  174. template: `
  175. <el-time-select
  176. ref="picker"
  177. :picker-options="{
  178. start: '08:30',
  179. step: '00:15',
  180. end: '18:30'
  181. }"
  182. placeholder="选择时间">
  183. </el-time-select>
  184. `
  185. }, true);
  186. const spyFocus = sinon.spy();
  187. const spyBlur = sinon.spy();
  188. vm.$refs.picker.$on('focus', spyFocus);
  189. vm.$refs.picker.$on('blur', spyBlur);
  190. vm.$el.querySelector('input').focus();
  191. vm.$el.querySelector('input').blur();
  192. vm.$nextTick(_ => {
  193. expect(spyFocus.calledOnce).to.be.true;
  194. expect(spyBlur.calledOnce).to.be.true;
  195. done();
  196. });
  197. });
  198. });