123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import Vue from 'vue';
- import Element from 'main/index.js';
- Vue.use(Element);
- let id = 0;
- const createElm = function() {
- const elm = document.createElement('div');
- elm.id = 'app' + ++id;
- document.body.appendChild(elm);
- return elm;
- };
- /**
- * 回收 vm
- * @param {Object} vm
- */
- exports.destroyVM = function(vm) {
- vm.$destroy && vm.$destroy();
- 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) {
- if (Object.prototype.toString.call(Compo) === '[object String]') {
- Compo = { template: Compo };
- }
- return new Vue(Compo).$mount(mounted === false ? null : createElm());
- };
- /**
- * 创建一个测试组件实例
- * @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);
- };
- /**
- * 触发一个事件
- * 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;
- };
- /**
- * 触发 “mouseup” 和 “mousedown” 事件
- * @param {Element} elm
- * @param {*} opts
- */
- exports.triggerClick = function(elm, ...opts) {
- exports.triggerEvent(elm, 'mousedown', ...opts);
- exports.triggerEvent(elm, 'mouseup', ...opts);
- return elm;
- };
- /**
- * 触发 keydown 事件
- * @param {Element} elm
- * @param {keyCode} int
- */
- exports.triggerKeyDown = function(el, keyCode) {
- const evt = document.createEvent('Events');
- evt.initEvent('keydown', true, true);
- evt.keyCode = keyCode;
- el.dispatchEvent(evt);
- };
|