vue 数组 find_前端单元测试--vue组件测试

本文介绍了在Vue项目中如何安装和使用单元测试模块,特别是针对组件的挂载、DOM测试以及组件间值传递的测试方法。通过shallowMount和mount进行组件隔离测试,使用find和findAll进行DOM元素查找,以及模拟事件触发。同时探讨了Vue单元测试的原则,如F.I.R.S.T原则,强调测试应快速、独立、可重复、自我验证且及时编写。
摘要由CSDN通过智能技术生成

所谓千呼万唤始(屎)出来,继前作Jest基本语法后,憋了许久时间终于开始着手开始写组件测试了。

一、安装vue单元测试模块

1.1、新项目

vue-cli3本身集成有单元测试模块,对于新创建的项目来说,安装单元测试模块非常简单。只需要在创建项目的时候选择所需要的测试工具即可

d908ca348cd7c6d70cfc9da25816c729.png

项目创建成功后有一个test文件夹,里面有一个example.spec.js的简单测试用例,运行npm run test:unit,即可对HelloWorld组件进行测试。如果使用的IDE是Vs code的话,则可以安装Jest插件,这样就可无需运行test指令就开始跑单测。

1.2、老项目

如果是vue-cli3的项目的话可以运行vue add unit-jest指令,就会往我们的项目中安装@vue/cli-plugin-unit-jest单测模块,并添加jest.config.js配置文件,可对其进行简单的配置

module.exports = {
    
  preset: '@vue/cli-plugin-unit-jest',
  moduleFileExtensions: ['js', 'vue'], // jset匹配的文件后缀为js和vue
  transform: {
    
    '^.+.vue$': '<rootDir>/node_modules/vue-jest', // vue文件用vue-jest 处理
    '^.+.js$': '<rootDir>/node_modules/babel-jest' // js文件用babel-jest
  },
  moduleNameMapper: {
     // 处理webpack配置的别名
    '^@/(.*)$': '<rootDir>/src/$1'// @表示src文件夹
  },
  snapshotSerializers: ['jest-serializer-vue'], // 序列化测试结果,使其更美观
  testMatch: ['**/tests/**/*.spec.js'], // 单测文件地址
  transformIgnorePatterns: ['<rootDir>/node_modules/'], // 不进行匹配的目录
  collectCoverage: true, // 开启单测覆盖率
  collectCoverageFrom: ['**/*.{js,vue}', '!**/node_modules/**'] // 确定哪些需要文件需要生成测试报告
}

如果还需进行进一步的配置的话,可参考官方的配置文档。

二、vue组件测试

2.1、组件的挂载

由于前端组件化,使得UI测试变得容易很多。每个组件都可以被简化为类似于UI=fn(data)的表达式,这个表达式是一个描述UI是什么样的虚拟DOM,给这个表达式输入一些参数,就会得到UI描述的输出。

但是经过这样的抽象后还是存在一个问题,由于DOM是一个树形的结构。越处于上层的组件,其复杂度必然会随之提高。对于最底层的子组件来说,我们可以很容易得将其进行渲染并测试其逻辑的正确与否,但对于较上层的父组件来说,通常来说就需要对其所包含的所有子组件都进行预先渲染,甚至于最上面的组件需要渲染出整个 UI 页面的真实 DOM 节点才能对其进行测试,这显然是不可取的。

在vue-unit-test中就提供了shallowMountmount 两个方法来实现组件的挂载,其中shallowMount就可以解决这个问题,它只渲染组件本身,但会保留子组件在组件中的存根。

区别这两种方法的目的在于,当我们只想对某个孤立的组件进行测试的时候,一方面可以避免其子组件的影响,另一方面对于包含许多子组件的组件来说,完全渲染子组件会导致组件的渲染树过大,这可能会影响到我们的测试速度

在组件挂载后,我们可以通过wrapper.vm访问到组件的实例,通过wrapper.vm进而可以访问到组件所有的props、data和methods等等。

import {
     shallowMount, mount } from '@vue/test-utils'
import HelloWorld from '@/components/HelloWorld
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值