Blame view

test/unit/util.js 3.3 KB
9b6ff1ce   huixisheng   add test and upda...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  import Vue from 'vue';
  import iView from '../../src/index';
  
  Vue.use(iView);
  
  let id = 0;
  
  const createElm = function() {
    const elm = document.createElement('div');
  
    elm.id = 'app' + ++id;
    document.body.appendChild(elm);
  
    return elm;
  };
  
57f0582b   Sergio Crisostomo   Pass correct argu...
17
18
  const pad = (nr) => nr < 10 ? '0' + nr : nr;
  
9b6ff1ce   huixisheng   add test and upda...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  /**
   * 回收 vm
   * @param  {Object} vm
   */
  exports.destroyVM = function(vm) {
    vm.$el &&
    vm.$el.parentNode &&
    vm.$el.parentNode.removeChild(vm.$el);
  };
  
  /**
   * 创建一个 Vue 的实例对象
   * @param  {Object|String}  Compo   组件配置,可直接传 template
   * @param  {Boolean=false} mounted 是否添加到 DOM 
   * @return {Object} vm
   */
  exports.createVue = function(Compo, mounted = false) {
    const elm = createElm();
  
    if (Object.prototype.toString.call(Compo) === '[object String]') {
      Compo = { template: Compo };
    }
    return new Vue(Compo).$mount(mounted === false ? null : elm);
  };
  
  /**
   * 创建一个测试组件实例
   * @link http://vuejs.org/guide/unit-testing.html#Writing-Testable-Components
   * @param  {Object}  Compo          - 组件对象
   * @param  {Object}  propsData      - props 数据
   * @param  {Boolean=false} mounted  - 是否添加到 DOM 
   * @return {Object} vm
   */
  exports.createTest = function(Compo, propsData = {}, mounted = false) {
    if (propsData === true || propsData === false) {
      mounted = propsData;
      propsData = {};
    }
    const elm = createElm();
    const Ctor = Vue.extend(Compo);
    return new Ctor({ propsData }).$mount(mounted === false ? null : elm);
  };
  
  /**
db1b716f   Sergio Crisostomo   Add more DatePick...
63
64
65
66
67
68
69
70
71
72
   * Transform Date string (yyyy-mm-dd hh:mm:ss) to Date object
   * @param {String}
   */
  exports.stringToDate = function(str) {
    const parts = str.split(/[^\d]/).filter(Boolean);
    parts[1] = parts[1] - 1;
    return new Date(...parts);
  };
  
  /**
65255c96   Sergio Crisostomo   fix date formatti...
73
74
75
76
   * Transform Date to yyyy-mm-dd string
   * @param {Date}
   */
  exports.dateToString = function(d) {
57f0582b   Sergio Crisostomo   Pass correct argu...
77
    return [d.getFullYear(), d.getMonth() + 1, d.getDate()].map(pad).join('-');
65255c96   Sergio Crisostomo   fix date formatti...
78
79
80
  };
  
  /**
57f0582b   Sergio Crisostomo   Pass correct argu...
81
82
83
84
85
86
87
88
89
90
   * Transform Date to HH:MM:SS string
   * @param {Date}
   */
  exports.dateToTimeString = function(d){
    const date = new Date(d);
    return [date.getHours(), date.getMinutes(), date.getSeconds()].map(pad).join(':');
  
  }
  
  /**
9b6ff1ce   huixisheng   add test and upda...
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
   * 触发一个事件
   * mouseenter, mouseleave, mouseover, keyup, change, click 
   * @param  {Element} elm
   * @param  {String} name
   * @param  {*} opts
   */
  exports.triggerEvent = function(elm, name, ...opts) {
    let eventName;
  
    if (/^mouse|click/.test(name)) {
      eventName = 'MouseEvents';
    } else if (/^key/.test(name)) {
      eventName = 'KeyboardEvent';
    } else {
      eventName = 'HTMLEvents';
    }
    const evt = document.createEvent(eventName);
  
    evt.initEvent(name, ...opts);
    elm.dispatchEvent
      ? elm.dispatchEvent(evt)
      : elm.fireEvent('on' + name, evt);
  
    return elm;
  };
3b9de249   Sergio Crisostomo   Add simple unit t...
116
117
118
119
120
121
122
123
124
125
  
  /**
  * Wait for components inner async process, when this.$nextTick is not enough
  * @param {Function} the condition to verify before calling the callback
  * @param {Function} the callback to call when condition is true
  */
  exports.waitForIt = function waitForIt(condition, callback) {
    if (condition()) callback();
    else setTimeout(() => waitForIt(condition, callback), 50);
  };
a8707afa   Sergio Crisostomo   Add tests for 1807
126
127
128
129
130
131
132
133
134
135
  
  /**
  * Call a components .$nextTick in a promissified way
  * @param {Vue Component} the component to work with
  */
  exports.promissedTick = component => {
    return new Promise((resolve, reject) => {
      component.$nextTick(resolve);
    });
  };