util.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import Vue from 'vue/dist/vue';
  2. import Element from 'main/index.js';
  3. Vue.use(Element);
  4. let id = 0;
  5. const createElm = function() {
  6. const elm = document.createElement('div');
  7. elm.id = 'app' + ++id;
  8. document.body.appendChild(elm);
  9. return elm;
  10. };
  11. /**
  12. * 创建一个 Vue 的实例对象
  13. * @param {Object|String} Compo 组件配置,可直接传 template
  14. * @param {Boolean=false} mounted 是否添加到 DOM 上
  15. * @return {Object} vm
  16. */
  17. exports.createVue = function(Compo, mounted = false) {
  18. const elm = createElm();
  19. if (Object.prototype.toString.call(Compo) === '[object String]') {
  20. Compo = { template: Compo };
  21. }
  22. return new Vue(Compo).$mount(mounted === false ? null : elm);
  23. };
  24. /**
  25. * 创建一个测试组件实例
  26. * @link http://vuejs.org/guide/unit-testing.html#Writing-Testable-Components
  27. * @param {Object} Compo - 组件对象
  28. * @param {Object} propsData - props 数据
  29. * @param {Boolean=false} mounted - 是否添加到 DOM 上
  30. * @return {Object} vm
  31. */
  32. exports.createTest = function(Compo, propsData = {}, mounted = false) {
  33. if (propsData === true || propsData === false) {
  34. mounted = propsData;
  35. propsData = {};
  36. }
  37. const elm = createElm();
  38. const Ctor = Vue.extend(Compo);
  39. return new Ctor({ propsData }).$mount(mounted === false ? null : elm);
  40. };
  41. /**
  42. * 触发一个事件
  43. * mouseenter, mouseleave, mouseover, keyup, change 等
  44. * @param {Element} elm
  45. * @param {EventName} name
  46. * @param {options} opts
  47. */
  48. exports.triggerEvent = function(elm, name, opts) {
  49. let eventName;
  50. if (/^mouse/.test(name)) {
  51. eventName = 'MouseEvents';
  52. } else if (/^key/.test(name)) {
  53. eventName = 'KeyboardEvent';
  54. } else {
  55. eventName = 'HTMLEvents';
  56. }
  57. const evt = document.createEvent(eventName);
  58. evt.initEvent(name, ...opts);
  59. elm.dispatchEvent
  60. ? elm.dispatchEvent(evt)
  61. : elm.fireEvent('on' + name, evt);
  62. };