time-select.spec.js 5.2 KB

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