• 技术文章 >web前端 >Vue.js

    什么是单元测试?Vue 组件怎么进行单元测试?

    青灯夜游青灯夜游2022-04-08 20:30:32转载196
    本篇文章带大家了解一下Vue 组件的单元测试,介绍一下Vue 组件配置单元测试,进行单元测试的方法,希望对大家有所帮助!

    我们先来简单解释一下单元测试:就是对函数的输入输出进行测试,使用断言的方式,判断我们输入的用例的结果和我们实际输入的结果是否相同

    组件的单元测试就是使用单元测试工具,对组件的各种状态和行为进行测试

    组件单元测试的好处

    准备工作

    在我们进行单元测试模拟之前,我们需要对环境进行一些配置

    安装依赖

    npm install --save-dev jsdom jsdom-global
    npm install --save-dev jest
    npm install --save-dev @vue/vue2-jest # (use the appropriate version)
    yarn add --dev babel-jest @babel/core

    安装测试依赖

    yarn add jest @vue/test-utils vue-jest babel-jest -D -W

    这里有点小问题,如果使用下发的命令进行安装的话会出现一点点的小错误

    yarn add jest @vue/test-utils vue-jest babel-jest -D

    报错截图:

    1.png

    Jest 的配置

    jest.config.js

    module.exports = {
      "testMatch": ["**/__tests__/**/*.[jt]s?(x)"],
      "moduleFileExtensions": [
        "js",
        "json",
        // 告诉 Jest 处理 `*.vue` 文件
        "vue"
      ],
      "transform": {
        // 用 `vue-jest` 处理 `*.vue` 文件
        ".*\\.(vue)$": "vue-jest",
        // 用 `babel-jest` 处理 js
        ".*\\.(js)$": "babel-jest" 
      }
    }

    基于上面的测试文件的配置,我们会将每个测试文件的配置放置于__tests__

    创建测试用例:

    项目地址:https://gitee.com/liuyinghao123/task/tree/master/Part7/element

    我们使用:packages\inputinput 组件进行测试

    packages\input 文件夹下 创建 __tests__ 文件夹 后创建 input.test.js

    这里先给大家普及一下几个常用的API

    2.png

    测试用例1 判断是否是文本框

    import input from '../src/input.vue'
    import { mount } from '@vue/test-utils' // 挂载
    
    describe('lg-input', () => {
      test('input-text', () => {
        const wrapper = mount(input)
        expect(wrapper.html()).toContain('input type="text"')
      })
    })

    这里我们需要 使用@vue/test-utils提供的mount方法进行挂载,注意,这里只是在内存中进行挂载,并且我们需要保存这个包裹器返回的内容

    const wrapper = mount(input)

    这个用例很简单,就是想要知道我们生产的是否是一个文本框,这里一个简单的测试用例就写完了,接着我们运行一下:

    yarn test

    运行结果

    3.png

    修改用例

    expect(wrapper.html()).toContain('input type="tex123123123t"')

    运行结果

    4.png

    5.png

    测试失败,提示没有找到input type="tex123123123t"的内容,符合预期,没有问题。

    测试用例2 判断是否是密码框

     test('input-password', () => {
        const wrapper = mount(input, {
          propsData: {
            type: 'password'
          }
        })
        expect(wrapper.html()).toContain('input type="password"')
      })

    我们可以通过propsData来进行设置组件的props属性

    运行结果

    6.png

    测试用例3 组件接收值是否正确

      test('input-password', () => {
        const wrapper = mount(input, {
          propsData: {
            type: 'password',
            value: 'admin'
          }
        })
        expect(wrapper.props('value')).toBe('admin')
      })

    这里我们通过wrapper.props获取他的props属性,拿到这个值之后,进行判断

    运行结果

    7.png

    测试用例4 快照的使用

      test('input-snapshot', () => {
        const wrapper = mount(input, {
          propsData: {
            type: 'text',
            value: 'admin'
          }
        })
        expect(wrapper.vm.$el).toMatchSnapshot()
      })

    我们要把挂载的dom对象拍一个快照,我们第一次调用这个方法的时候,他会把这个内容挂载到一个特殊的文本文件中,当我们再次生产测试的时候,会将我们刚刚存储的文件进行对比,如果发生了变化就会出现测试失败的情况

    文件结构:

    8.png

    修改快照的propsData

    propsData: {
        type: 'password',
        value: 'admin'
    }

    测试结果

    9.png

    10.png

    删除快照结果,重新生成

    yarn test -u

    总结

    到这里我们的单元测试简单版 Demo 就这样完结了,单元测试对我们进行组件化的开发还是非常重要的,配合 stroyBooks,我们可以做到很多

    (学习视频分享:web前端开发

    以上就是什么是单元测试?Vue 组件怎么进行单元测试?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:Vue 组件 单元测试
    上一篇:ES6的保留字有哪些 下一篇:记录一个使用Vue 3开发Fimga插件的过程
    Web大前端开发直播班

    相关文章推荐

    • 对比一下Vue指令v-show 和 v-if,聊聊使用场景• 手把手带你了解Vue中怎么使用filters过滤器?2种用法浅析• 【吐血总结】20+个好用的 Vue 组件库,快来收藏!• 聊聊什么是虚拟dom?vue为什么采用vdom?• 认识一下vue中的模板语法,聊聊容器和实例的关系

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网