精华内容
下载资源
问答
  • Vue Test Utils Vue Test UtilsVue.js的官方测试库。 软件包此存储库提供以下两个软件包:Vue Test Utils Vue Test Utils Vue Test UtilsVue.js的官方测试库。 软件包此存储库提供以下两个软件包:Vue Test ...
  • 主要介绍了vue使用xe-utils函数库的具体方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • vue-test-utils-next Vue测试实用程序的下一个迭代。它以Vue 3为目标。 安装及使用 毛线: yarn add @vue/test-utils@next --dev npm: npm install @vue/test-utils@next --save-dev 开始使用。 来自Vue 2 + Vue...
  • 主要介绍了vue实现的封装全局filter并统一管理操作,结合实例形式详细分析了vue封装全局filter及相关使用技巧,需要的朋友可以参考下
  • vue创建工具utils文件

    千次阅读 2020-01-19 14:41:54
    说明: 封装一个公共方法...1、在src下创建utils文件夹,目录下创建index.html import config from '@/config' export default { // websocket websocket: '', // 创建websocket链接 connectWebsocket (val) {...

    说明: 封装一个公共方法connectWebsocket() ,进行全局调用

    1、在src下创建utils文件夹,目录下创建index.html

    import config from '@/config'
    export default {
      // websocket
      websocket: '',
      // 创建websocket链接
      connectWebsocket (val) {
        debugger
        let _this = this
        const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro
        if (typeof (WebSocket) === 'undefined') {
          alert('您的浏览器不支持socket')
        } else {
          // 实例化websocket
          var path = baseUrl.replace('http', 'ws') + '/websocket/' + val
          _this.websocket = ''
          _this.websocket = new WebSocket(path)
          // 监听websocket连接
          _this.websocket.onopen = function (event) {
            console.log('建立连接')
            sessionStorage.setItem('ws', _this.websocket)
          }
          // 监听websocket错误信息
          _this.websocket.onerror = function () {
            alert('websocket通信发生错误!')
          }
          // websocket
          _this.websocket.onmessage = function (event) {
            debugger
            var t
            if (event.data) {
              try {
                // 封装返回的数据
                t = JSON.parse(event.data)
                console.log(t.content)
              } catch (e) {
                // 如果是字符串则直接赋值
                t = event.data
              }
            }
            // 如果是登陆
            if (t === 'uccessfulconnection') {
              // 音乐播放欢迎登陆
            } else { // 发送消息
              if (t instanceof Object) {
                if (t.type === 0) {
                  // 发送的消息
                  Notice.info({
                    title: '消息通知',
                    desc: t.username + t.content
                  })
                  Header.methods.changeunreadcount('add', 1)
                } else if (t.type === 1) {
                  // 发送的公告
                  Notice.info({
                    title: '公告通知',
                    desc: t.username + t.content
                  })
                } else {
                }
              } else if (t instanceof String) {
                // 分配任务时工作流调用
              } else {
                // 其他
              }
              // 弹窗提醒, 播放音乐
              // document.getElementById('notice').play();
              //   }
            }
          }
          // websocket
          _this.websocket.onclose = function (event) {
            console.log('连接关闭')
            _this.websocket = ''
            sessionStorage.removeItem('ws')
          }
          // 页面刷新时关闭连接(此处不写一样会关闭,因一些原因要写上)
          window.onbeforeunload = function () {
            _this.websocket.close()
            _this.websocket = ''
            sessionStorage.removeItem('ws')
          }
        }
      }
    }
    

    2、封装使用,在main.js中添加

    // 工具函数引入
    import Utils from './utils'
    
    Object.defineProperty(Vue.prototype, '$Utils', {value: Utils})

    3、调用函数

    this.$Utils.connectWebsocket(res.id)

     

    展开全文
  • 学习Vue Test Utils

    千次阅读 2019-05-29 22:30:32
    刚开始找了一本书Testing Vue.js Application,看书觉得好简单,谁知道,仅仅按照书中的例子运行就遇到了问题。我搞不清楚是不是因为高端大气上档次的天朝网络导致我安装依赖包出现了问题进而导致运行失败,还是别的...

    钟情TDD很久了,然而从来没有真正使用过,因为我不会写单元测试,尤其是前端UI的单元测试,那是什么鬼?

    终于我下定决心要试一试。刚开始找了一本书Testing Vue.js Application,看书觉得好简单,谁知道,仅仅按照书中的例子运行就遇到了问题。我搞不清楚是不是因为高端大气上档次的天朝网络导致我安装依赖包出现了问题进而导致运行失败,还是别的什么原因,cnpm我也试了,总会有这样那样的问题,我只运行到chapter-2,chapter-3总是失败,最终我还是决定先把Testing Vue.js Application这本书放一放,先把Vue Test Utils官网文档过一遍。

    先列出涉及到的一些东西,后续可能还需要不出的:

    • Vue
    • Vue Test Utils
    • sinon
    • expect
    • vue-jest
    • babel-jest
    • jest
    • babel
    • Chai
    • Webpack
    • yarn

    引入jest

    接下来先从头开始搭建一个vue项目,然后配置jest

    • 创建webpack-simple项目
    vue init webpack-simple simple
    cd simple
    npm i
    
    • 安装@vue/test-utils Jest
    npm i --save-dev @vue/test-utils jest
    
    • 设置scripts
    // package.json
    ...
    "scripts": {
    ...
    "test": "jest"
    ...
    }
    ...
    
    • 添加HelloWorld.vue,并为其添加测试文件HelloWorld.spec.js
    // src/HelloWorld.vue
    <template>
    <div>{{ msg }}</div>
    </template>
    <script>
    	export default {
    		data() {
    			return {
    				msg: 'Hello World!'
    			}
    		}
    	}
    </script>
    
    // src/__test__/HelloWorld.spec.js
    空
    
    • 运行npm run test试试,得到了如下错误
      在这里插入图片描述
    FAIL  src/__test__/HelloWorld.spec.js
      ● Test suite failed to run
    
        Plugin/Preset files are not allowed to export objects, only functions. In D:\zheteng\vuetestdemo\simple2\node_modules\babel-preset-stage-3\lib\index.js
    
          at createDescriptor (node_modules/@babel/core/lib/config/config-descriptors.js:178:11)
          at items.map (node_modules/@babel/core/lib/config/config-descriptors.js:109:50)
              at Array.map (<anonymous>)
          at createDescriptors (node_modules/@babel/core/lib/config/config-descriptors.js:109:29)
          at createPresetDescriptors (node_modules/@babel/core/lib/config/config-descriptors.js:101:10)
          at presets (node_modules/@babel/core/lib/config/config-descriptors.js:47:19)
          at mergeChainOpts (node_modules/@babel/core/lib/config/config-chain.js:320:26)
          at node_modules/@babel/core/lib/config/config-chain.js:283:7
          at buildRootChain (node_modules/@babel/core/lib/config/config-chain.js:120:22)
          at loadPrivatePartialConfig (node_modules/@babel/core/lib/config/partial.js:85:55)
    

    真心表示看不懂!大体猜测是babel的问题。我就去.babelrc文件中把一些东西注释掉了。其实这其中还有一段事情,打死我也不可能直接去.babelrc中注释掉的,我是对比了Vue Test Utils文档中的例子才做的。
    在这里插入图片描述

    {
      "presets": [
        ["env", { 
          // "modules": false 
          }]/*,
        "stage-3"*/
      ]
    }
    
    
    • 再次运行npm run test,错误变了
      在这里插入图片描述
      这是因为测试文件中没有任何东西,补充点东西
    describe('HelloWorld.vue', () => {
    	it('sanity test', () => {
    	
    	})
    })
    

    成功

    • 测试一下HelloWorld.vue吧
    import HelloWorld from '../HelloWorld.vue'
    import { mount } from '@vue/test-utils'
    describe('HelloWorld.vue', () => {
      it('sanity test', () => {
        const wrapper = mount(HelloWorld)
        expect(wrapper.vm.msg).toBe('Hello World!')
      })
    })
    

    运行npm run test,竟然又报错了
    在这里插入图片描述
    在这里插入图片描述

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
    
        By default, if Jest sees a Babel config, it will use that to transform your files,
    ignoring "node_modules".
    
        Here's what you can do:
         • To have some of your "node_modules" files transformed, you can specify a custom
    "transformIgnorePatterns" in your config.
         • If you need a custom transformation specify a "transform" option in your config.     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
        You'll find more details and examples of these config options in the docs:
        https://jestjs.io/docs/en/configuration.html
    

    依然不知道这是什么原因,大概是它不认识import吧,这时候我想起来了babel-jest,然后就安装了,依然是这个错误,崩溃了。
    仔细想想,应该是.vue不认识,这时候我想起来了vue-jest.那就死马当活马医吧。
    然后还需要配置jest,在package.json或者单独的配置文件都行,我是写在了package.json中,如下

    ...
    "jest": {
    	"transform": {
    		"^.+\\.js": "<rootDir>/node_modules/babel-jest",
    		".*\\.(vue)$": "vue-jest"
    	}
    }
    ...
    

    npm run test
    打完收工

    直接运行vue-cli创建的项目中的单元测试

    vue init webpack vue-demo
    

    这样会创建一个vue的单页应用,在创建过程中会让我们选择是否单元测试。运行npm run unit就可以运行单元测试。不过可惜不知道是什么原因,硬是报错了
    在这里插入图片描述

    FAIL  test\unit\specs\HelloWorld.spec.js
      ● Test suite failed to run
    
        SecurityError: localStorage is not available for opaque origins
    
          at Window.get localStorage [as localStorage] (node_modules/jsdom/lib/jsdom/browser/Window.js:257:15)
              at Array.forEach (<anonymous>)
    

    说啥子我也不懂这是为什么,就去网上搜,最后有人说把testURL改成http://localhost/就好了。在src/unit/jest.conf.js中添加testURL: 'http://localhost/'就好了,如下

    // src/unit/jest.conf.js 这是jest的配置文件
    ...
    testURL: 'http://localhost/'
    ...
    

    至于为什么这么玩,我暂时还不知道,我还没有对jest进行过了解。后续看看jest的文档应该会清楚吧,立个flag。// TODO: jest文档

    按道理说这是用vue的脚手架创建的项目不应该出现这种问题,原因是啥不知道,希望以后我们知道,如果有好心人告诉我就更好了:)

    我终于让Testing Vue.js Application的chapter-3的例子跑起来了:)

    2019-05-30
    我还是没有忍住,又一次尝试运行Testing Vue.js Application第三章的例子——chapter-3.

    • 重新克隆git clone https://github.com/eddyerburgh/vue-hackernews
    • 安装依赖,cnpm i
    • 运行npm run test:unit,得到这个错误localStorage is not available for opaque origins,我依稀记得,我之前从chapter-2切换到chapter-3不是这个错误,我已经凌乱了。不管怎么说了,我知道这个错误怎么解决了,上文书已经说了!
    • 在执行npm run test:unit竟然成功了,无语凝噎

    未完待续。。。

    展开全文
  • 准备工作 注意:使用lerna开发工具库需要区分不同的包装,需要用到yarn工作区,所以推荐使用yarn // package.json文件设置,开启工作区 "private" : true , "workspaces" : [ "./packages/*" ...
  • 主要是版本的问题,必须一致。 删掉jest.config.js(如果有的话) 如果测试覆盖率不显示执行如下代码: npm list handlebars //查看版本信息 npm uninstall -g handlebars //卸载当前版本 npm install handlebars@...

    主要是版本的问题,必须一致。
    删掉jest.config.js(如果有的话)
    在这里插入图片描述
    在这里插入图片描述

    如果测试覆盖率不显示执行如下代码:
    npm list handlebars //查看版本信息
    npm uninstall -g handlebars //卸载当前版本 npm install handlebars@4.5.3 //安装

    展开全文
  • 此文章用来解释vue-cli脚手架build目录中的utils.js配置文件 1.此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-style-loader 2.关于注释 •当涉及到较复杂的解释我将通过标识的方式...
  • Vue Test UtilsVue.js的官方测试库。 配套 该存储库提供以下两个软件包: 您可以通过以下命令安装这些软件包。 npm install --save-dev @vue/test-utils npm install --save-dev @vue/server-test-utils 对等...
  • 用于Vue全局安装xe-utils 正在安装 npm install xe-utils vxe-utils < script src =" https://cdn.jsdelivr.net/npm/vue " > </ script > < script src =" https://cdn.jsdelivr.net/npm/xe-utils ...
  • vue一些utils

    2020-06-12 14:43:19
    utils1.blob2base642.base64 字符串之间的转化3格式化日期相关4防抖与节流 1.blob2base64 let blob2base64 = async (blobData, type = 'image/jpeg') => { let blob = new Blob([blobData], { type: type }) ...

    7.高精度权限控制—自定义指令directive

    我们通常给一个元素添加 v-if / v-show 来做权限管理,但如果判断条件繁琐且多个地方需要判断,这种方式的代码不仅不优雅而且冗余。
    针对这种情况,我们可以通过全局自定义指令来处理:我们先在新建个 array.js 文件,用于存放与权限相关的全局函数

    
    // array.js
    export function checkArray (key) {
      let arr = ['1', '2', '3', '4', 'demo']
      let index = arr.indexOf(key)
      if (index > -1) {
        return true // 有权限
      } else {
        return false // 无权限
      }
    }
    
    

    然后在将 array 文件挂载到全局中:

    
    // main.js
    import { checkArray } from "./common/array";
    Vue.directive("permission", {
      inserted (el, binding) {
        let permission = binding.value; // 获取到 v-permission的值
        if (permission) {
          let hasPermission = checkArray(permission);
          if (!hasPermission) { // 没有权限 移除Dom元素
            el.parentNode && el.parentNode.removeChild(el);
          }
        }
      }
    });
    

    最后我们在页面中就可以通过自定义指令 v-permission 来判断:

    <div class="btns">
        <button v-permission="'1'">权限按钮1</button>  // 会显示
        <button v-permission="'10'">权限按钮2</button>  // 无显示
        <button v-permission="'demo'">权限按钮3</button> // 会显示
      </div>
    

    6.一劳永逸的组件注册

    通常在组件使用前,需要引入后再注册,但如果高频组件多了,每次都这样做,不仅新增很多代码,效率还低!我们应该如何优化呢?

    其实,我们可以借助一下webpack的require.context() 方法来创建自己的(模块)上下文,从而实现自动动态require组件。

    我们先在components文件夹(这里面都是些高频组件)添加一个叫global.js的文件,在这个文件里使用require.context 动态将需要的高频组件统统打包进来,然后在main.js文件中引入global.js的文件。

    //  global.js文件
    import Vue from 'vue'
    function changeStr (str) {
      return str.charAt(0).toUpperCase() + str.slice(1)
    }
    const requireComponent = require.context('./', false, /\.vue$/)
    // 查找同级目录下以vue结尾的组件
    const install = () => {
      requireComponent.keys().forEach(fileName => {
        let config = requireComponent(fileName)
        console.log(config) // ./child1.vue 然后用正则拿到child1
        let componentName = changeStr(
          fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')
        )
        Vue.component(componentName, config.default || config)
      })
    }
    export default {
      install // 对外暴露install方法
    }
    

    最后我们就可以随时随地在页面中使用这些高频组件,无需再手动一个个引入了。

    //main.js
    import globals from './components/form/global'
    Vue.use(globals)
    

    5.blob2base64

    let blob2base64 = async (blobData, type = 'image/jpeg') => {
      let blob = new Blob([blobData], { type: type })
      let fileReader = new FileReader()
      let result = await new Promise((resolve, reject) => {
        fileReader.readAsDataURL(blob)
        fileReader.onload = (e) => {
          resolve(e.target.result)
        }
      })
    
      return result
    }
    export default {
      blob2base64
    }
    

    在这里插入图片描述
    在这里插入图片描述
    或者这样:
    在这里插入图片描述

    4.base64 字符串之间的转化

    const addBase64 = (str) => {
      // 对字符串进行编码
      const encode = encodeURI(str);
      // 对编码的字符串转化base64
      const base64 = btoa(encode);
      return base64;
    };
    // base64转字符串
    const transBase64 = (base64) => {
      // 对base64转编码
      const decode = atob(base64);
      // 编码转字符串
      const str = decodeURI(decode);
      return str;
    };
    export {
       addBase64, transBase64,
    };
    

    3格式化日期相关

    /**
     * @description 转UTC时间格式
     * @param {time} time如果是'start'表示本年度的1月1日00:00:00 ,如果是'end'表示本年度的12月31日23:59:59 ,time也可以是Date构造函数的实参
     * @return String UTC格式的时间字符串
     */
    export const formatDateToUtc = (time) => {
      const curDate = new Date()
      const curYear = curDate.getFullYear()
      if (time === 'start') {
        return new Date(`${curYear}-1-1`).toISOString()
      } else if (time === 'end') {
        return new Date(`${curYear + 1}-1-1`).toISOString()
      } else {
        return new Date(time).toISOString()
      }
    }
    /**
     * @description UTC时间转正常时间
     */
    export const dateFormat = (timer) => {
      let date = new Date(timer)
      let y = String(date.getFullYear()).padStart(4, 0)
      let M = String(date.getMonth() + 1).padStart(2, 0)
      let d = String(date.getDate()).padStart(2, 0)
      let h = String(date.getHours()).padStart(2, 0)
      let m = String(date.getMinutes()).padStart(2, 0)
      let s = String(date.getSeconds()).padStart(2, 0)
      return `${y}-${M}-${d} ${h}:${m}:${s}`
    }
    
    **时间戳转正常日期**
    function dateFormat(time, format = "YYYY-MM-DD HH:mm:ss") {
      let date = new Date(time)
      const config = {
        YYYY: date.getFullYear(),
        MM: date.getMonth() + 1,
        DD: date.getDate(),
        HH: date.getHours(),
        mm: date.getMinutes(),
        ss: date.getSeconds()
      };
      for (const key in config) {
        format = format.replace(key, config[key]);
      }
      return format;
    }
    console.log(dateFormat(1588754368262, "YYYY年MM月DD日"));
    
    

    2防抖与节流

        
    /**
     * @description 防抖
     */
     function debance(fn, delay) {
      let timer = null;
      return () => {
        if (timer) {
          clearTimeout(timer);
        }
        timer = setTimeout(() => {
          fn();
        }, delay);
      };
    }
    
    window.addEventListener(
      "scroll",
      debance(() => {
        console.log(111);
      }, 1000)
    );
    /**  * @description 节流  */
    
    //方法一:设置一个标志
        function throttle(fn, delay) {
          let flag = true;
          return () => {
            if (!flag) return;
            flag = false;
            timer = setTimeout(() => {
              fn();
              flag = true;
            }, delay);
          };
        }
        //方法二:使用时间戳
      function throttle(fn, delay) {
          let startTime=new Date()
          return () => {
            let endTime=new Date()
            if (endTime-startTime>=delay){
              fn()
              startTime=endTime
            }else{
              return
            }
          };
        }
        window.addEventListener(
          "scroll",
          throttle(() => {
            console.log(111);
          }, 1000)
        );
    
    
    

    1截取地址栏参数

        getQueryString: function(key) {
            var reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)')
            var result = window.location.search.substr(1).match(reg)
            return result ? decodeURIComponent(result[2]) : null
        }
    
    展开全文
  • @ vue / component-compiler-utils 用于编译Vue单个文件组件的较低级实用程序 该软件包包含较低级的实用程序,如果您正在为将Vue单个文件组件编译为JavaScript的捆绑器或模块系统编写插件/转换,则可以使用这些实用...
  • vue-test-utils-vuex-example 一个示例仓库,演示如何在Vue单元测试中模拟Vuex 构建设置 # install dependencies npm install # run unit tests npm run unit
  • vue-composition-test-utils 简单的Vue Composition API测试实用程序 安装 // use yarn yarn add vue-composition-test-utils -D // use npm npm install vue-composition-test-utils -D 演示版 代码 import { ref ...
  • vue-jest-utils使用Jest测试Vue.js组件的实用程序。 尽管使用TypeScript编写(因此包括类型定义),但它也可以是u vue-jest-utils实用程序,用于使用Jest测试Vue.js组件。 尽管使用TypeScript编写(因此包括类型定义...
  • vue 使用 xe-utils 函数库

    千次阅读 2018-01-24 01:00:55
    npm install xe-utils vxe-utils --save 通过 Vue.use() 来全局安装 import Vue from 'vue' import XEUtils from 'xe-utils' import VXEUtils from 'vxe-utils' // mounts 可以设置['cookie', 'browse', 'locat'...
  • vue-test-utils 单元测试工具库 vue官方提供的,专门为测试单文件组件而开发 为什么使用 vue-test-utils vue-test-utilsvue官方的单元测试框架,提供了一系列非常方便的工具,使我们更轻松地为vue构建的应用来编写...
  • vue-element-utils vue 使用 element-ui 项目的一些工具方法、拓展自定义指令等 Custom Directives 对 element-ui 的一些组件做的拓展自定义指令工具 使用yarn包管理 提供指令: v-select-scroll: Select 组件监听...
  • 转载自http://www.cnblogs.com/ye-hcj/p/7078047.html,另添加了一点补充此文章用来解释vue-cli脚手架build目录中的utils.js配置文件此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-...
  • 主要介绍了vue-test-utils初使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了详解在vue-test-utils中mock全局对象,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • vue项目工具文件utils.js

    万次阅读 2018-04-13 10:09:36
    import Vue from 'vue'import XLSX from 'xlsx'/** * 图片预览方法 * 已注入所有Vue实例, * template模板里调用 $imgPreview(src) * 组件方法里调用 this.$imgPreview(src) */const imgPreview = (src) =&...
  • 开玩笑的匹配器测试实用程序 (jest-matcher-vue-test-utils) Cute matchers for Jest to test Vue components with Vue Test Utils. 对于可爱的匹配玩笑测试与Vue的成分VUE考试utils的 。 You can write tests for...
  • 我们在vue项目中Vue Test Utils 测试环境已经搭建完成的基础上来进行演示,搭建环境可以看我之前的文章。 本文中使用的相关技术点连接: 测试环境: Vue Test Utils 断言库:chai 二、基础 1、describe: ...
  • Vue A11y实用程序 Vue.js中的可访问性(a11y)实用程序 目录 为什么 背景 正如(WIP)Vue辅助功能指南页面所述: 世界卫生组织估计,世界上15%的人口患有某种形式的残疾,其中2-4%的人患有严重残疾...大致可...
  • vue-test-utils-ava-example 使用vue-test-utils和ava运行单元测试的示例项目 构建设置 # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,887
精华内容 12,754
关键字:

utilsvue

vue 订阅