Vue 单元测试 使用mocha+jest

目录

  • Vue 单元测试

    • mocha+jest
    • jest
    • 实例 mocha expect方法断言
    • 示例代码

Vue 单元测试

官网:https://vue-test-utils.vuejs.org/zh

定义:

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

指令:
package.json文件

  • "test:unit": "vue-cli-service test:unit"

测试驱动开发(TDD:Test-Driven Development)

mocha+jest

jest

实例 mocha expect方法断言

  • 格式模板

    describe 套件

        describe('名称',()=>{
            <!-- 用例 -->
            it('方法描述',()=>{
                /* 使用expect 断言语句 */
                /* 方法举例 */
                expcect(/* 需要检测的方法 */).to.be.equal(/* 检测结果 */)
            })
        })
  • 描述

    it()

测试异步代码 通过将回调(通常称为done)添加到it()

.to.be.equal 是否相等
.to.be.deep.equal 是否严格相等

示例代码

tests\unit\parser.spec.ts

  1. 测试各类断言语句执行成功或者失败

    /* 编写测试用例 */
    import {parser,stringify} from '@/code/parser';
    /* 使用mocha(测试工具) +chai(断言库) */
    import { expect } from 'chai';
    /* 套件 */
    describe('mytest1', () => {
        /* 用例 */
        // 常见的关系 相等 大于/小于 包含和不包含
        it('测试parser方法是否可用',()=>{
            // deep.equal 表示两个对象是否完全相等(引用空间无所谓)
            // .to.be.equal 表示两个对象相等(引用空间无所谓)
            expect(parser('name=zfpx')).to.be.deep.equal({name:'zfpx'})
        })
        it('测试stringify方法是否可用',()=>{
            expect(stringify({name:'3px'})).to.be.equal('name=3px')
        })
    })
    /* 断言语句各类 */
    describe('测试方法',()=>{
        it('相等关系',()=>{
            expect(1+1).to.be.equal(2);//相加的值
            expect([1,2,3]).to.be.lengthOf(3);//长度
            expect(true).to.be.true;//布尔值
        })
        it('包含',()=>{
            expect('zfpx').to.be.contain('zf');//是否包含指定字符
            expect('zfpx').to.be.match(/zf/);//是否匹配正则
    
        })
        it('大于,小于',()=>{
            expect(5).to.be.greaterThan(3)
            expect(3).to.be.lessThan(6)
            expect(3).to.be.not.greaterThan(5)//不大于3
        })
    })
    
  2. 测试模块是否正确渲染值

    src\components\unittest\demo1.vue

    <!-- 单元测试:是否能成功显示渲染的组件元素  -->
    <template>
    <div class="demo1">
        <h1>{{ datas }}</h1>
    </div>
    </template>
    
    <script>
    export default {
        name:'demo1',
        props:['datas'],
        data () {
            return {
    
            };
        }
    }
    
    </script>
    <style lang='less' scoped>
    </style>
    

    tests\unit\unit1.spec.ts

    import unitdemo1 from '@/components/unittest/demo1.vue';
    import Vue from 'vue';
    import {expect} from  'chai';
    import {mount} from  '@vue/test-utils';
    /* 写法1 产地属性后能否正常显示结果*/
    describe('unitdemo1',()=>{
        it('1.传递属性后能否正常显示结果',()=>{
            // 原生自己测试vue
            // extend 方法可以根据实例创建一个类
            let Constructor = Vue.extend(unitdemo1);
            // 对组件进行挂载
            // vm.$el mocha 测试的时候集成了 jsdom
            let vm:any = new Constructor({
                propsData:{datas:'hello'}
            }).$mount();
    
            /* 检测h1标签内是否包含hello */
    
            expect(vm.$el.querySelector('h1').innerHTML).to.be.contain('hello');
        })
    })
    /* 写法2 使用mount */
    describe('unitdemo1',()=>{
        it('2.传递属性后能否正常显示结果',()=>{
            let wrapper = mount(unitdemo1);
            /* 设置 Wrapper vm 的 prop 并强制更新。
            https://vue-test-utils.vuejs.org/zh/api/wrapper/setProps.html
            */
            wrapper.setProps({datas:'hello'});//设定传递的值为hello
            expect(wrapper.find('h1').text()).to.be.contain('hello');
        })
    })
  3. 测试模块内的加法是否执行

    src\components\unittest\demo2.vue

    <!--  -->
    <template>
    <div>
        <span id="count">{{count}}</span>
        <button @click = "increment">+</button>
    </div>
    </template>
    <script>
    //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
    //例如:import 《组件名称》 from '《组件路径》';
    
    export default {
    //import引入的组件需要注入到对象中才能使用
    components: {},
    data() {
        //这里存放数据
        return {
            count:10
        };
    },
    //监听属性 类似于data概念
    computed: {},
    //监控data中的数据变化
    watch: {},
    //方法集合
    methods: {
        increment(){
            this.count++
        }
    },
    //生命周期 - 创建完成(可以访问当前this实例)
    created() {},
    //生命周期 - 挂载完成(可以访问DOM元素)
    mounted() {},
    beforeCreate() {}, //生命周期 - 创建之前
    beforeMount() {}, //生命周期 - 挂载之前
    beforeUpdate() {}, //生命周期 - 更新之前
    updated() {}, //生命周期 - 更新之后
    beforeDestroy() {}, //生命周期 - 销毁之前
    destroyed() {}, //生命周期 - 销毁完成
    activated() {} //如果页面有keep-alive缓存功能,这个函数会触发
    };
    </script>
    <style lang='lesss' scoped>
    /* //@import url(); 引入公共css类 */
    </style>

    tests\unit\unit2.spec.ts

    import unitdemo2 from '@/components/unittest/demo2.vue';
    import Vue from 'vue';
    import {expect} from  'chai';
    import {mount} from  '@vue/test-utils';
    
    /* 写法2 使用mount */
    describe('测试demo2组件',()=>{
        it('单机能否+1',()=>{
            let wrapper = mount(unitdemo2);
            expect(wrapper.find('#count').text()).to.be.equal('10');
            wrapper.find('button').trigger('click');
            expect(wrapper.find('#count').text()).to.be.equal('11');
        })
    })

    测试代码执行:npm run test:unit

测试结果


     DONE  Compiled successfully in 3577ms

    [=========================] 100% (completed)

    WEBPACK  Compiled successfully in 3577ms

    MOCHA  Testing...

    { name: 'zfpx' }
    name=zfpx

    mytest1
        √ 测试parser方法是否可用
        √ 测试stringify方法是否可用

    测试方法
        √ 相等关系
        √ 包含
        √ 大于,小于

    unitdemo1
        √ 1.传递属性后能否正常显示结果

    unitdemo1
        √ 2.传递属性后能否正常显示结果

    测试demo2组件
        √ 单机能否+1

    8 passing (111ms)

    MOCHA  Tests completed successfully

原文地址:https://www.cnblogs.com/NB-JDzhou/p/11772497.html

时间: 2024-10-10 04:43:33

Vue 单元测试 使用mocha+jest的相关文章

使用Karma、Mocha实现vue单元测试

Karma Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner).该工具在Vue中的主要作用是将项目运行在各种主流Web浏览器进行测试.换句话说,它是一个测试工具,能让你的代码在浏览器环境下测试.需要它的原因在于,你的代码可能是设计在浏览器端执行的,在node环境下测试可能有些bug暴露不出来:另外,浏览器有兼容问题,karma提供了手段让你的代码自动在多个浏览器(chrome,firefox,ie等)环境下运行.如果你的代码只会运行在node端

前端单元测试框架-Mocha

引言 随着前端工程化这一概念的产生,项目开发中前端的代码量可谓是'急剧上升',所以在这种情况下,我们如何才能保证代码的质量呢,对于框架,比如React.Vue,因为有自己的语法规则,及时每个开发人员的编码风格规范各不相同,但最终的产出都大同小异,代码质量差距不是很大:但对于一些基础类库或方法的开发,我们就要谨慎又谨慎,代码质量一定要高,尽量避免出现Bug. 那我们如何做到产出高质量代码呢?单元测试才是正解,俗话说'跳过单元测试和不仔细过冒烟就交由QA测试的,就是在耍流氓'(这句话是我自己编的):

vue 单元测试入门

组件方法 // 同步方法 m1:function(a,b){ return a+b }, // 异步方法 m2:function(a,b,ab){ setTimeout(function(){ cb(a+b) },2000) }, 单元测试 // 同步方法 it('test function m1', () => { const m1 = vm.m1; expect(m1(2,3)).toEqual(5) }); // 异步方法 it('aysnc m2 should return 3', ()

前端js单元测试 使用mocha、chai、sinon,karma

karma(因果报应)  提供在浏览器上测试  可以同时跑在多个浏览器下 mocha测试框架  其他测试框架还有Jasmine chai断言库  expect = chai.expect sinon 测试替身(伪造或者模拟真实环境) 官网api    http://sinonjs.org/releases/v4.4.8/stubs/ spy间谍  spy=sinon.spy(obj,method)处理 stub  stub=sinon.stub(obj,method)替换掉那些使测试变慢和难以测

如何对第一个Vue.js组件进行单元测试 (上)

首先,为什么要单元测试组件? 单元测试是持续集成的关键.通过专注于小的.独立的实体,确保单元测试始终按预期运行,使代码更加可靠,你可以放心地迭代你的项目而不必担坏事儿. 单元测试不仅限于脚本.可以独立测试的任何东西都是可单元测试的,只要你遵循一些好的做法.这些实例包括单一责任.可预测性和松散耦合. 作为我们应用程序的可重用实体,Vue.js组件是单元测试的理想选择.我们将用不同的输入和交互测试做好的单个单元,并确保它始终按照我们的预期运行. 在开始之前 Vue CLI 3发布了.Vue Test

Vue.js—单元测试

Vue.js--测试 这里采用的是Vue官方工具(Vue-CLI)搭建出来的项目,在这个搭建工具中推荐的两种测试分别是 端到端的测试 E2E 单元测试 Unit Test 端到端的测试(E2E) E2E或者端到端(End-To-End)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样.简而言之,它从一个用户的角度出发,认为整个系统都是一个黑箱,只有UI会暴露给用户. 单元测试(Unit Test) 测试驱动开发(TDD:Test-Driven Developm

基于 vue 全家桶的 spa 项目脚手架

项目简介 Github: https://github.com/hanan198501/vue-spa-template 我们基于 vue-cli 脚手架生成项目模板做了一些改造,加入了 vue-router ,vuex 等配套设施,本地 dev server 中加入了接口 mock 功能,还增加一个 build server 来预览 build 结果页面,前后端通过 spa 的方式实现分离,并相应做了分离后的联调,部署方案.通过这个项目模板,可以快速搭建起用于前后端分离后的单页应用开发环境,项

vue2.0单元测试(一)

1.在vue init webpack XXX创建项目的时候 最后2步选择YES就启动了vue单元测试开始了 2.测试是使用karma+mocha框架来实现的方法,安装虚拟浏览器模块Phantomjs http://phantomjs.org/download.html这个网址下先去下载好 phantomjs-2.1.1-windows.zip这个包 之后在放到C盘里面C:\Users\Administrator\AppData\Local\Temp\phantomjs, 之后在用node重新安

vue项目目录结构详解

项目简介基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发,可以在开发时使用 ES Next.scss 等最新语言特性.项目包含: 基础库: vue.js.vue-router.vuex.whatwg-fetch 编译/打包工具:webpack.babel.node-sass 单元测试工具:karma.mocha.sinon-chai 本地服务器:express 目录结构 ├── README.md            项目介绍 ├── index.html