Vue Test Utils

本文详细介绍了如何使用Jest、Karma + Mocha + Chai + Sinon进行Vue.js项目的单元测试,包括vue-test-utils的安装和配置,以及测试Vue组件的各种方法,如测试DOM结构、Props、计算属性、监听器、插槽等。还提到了使用vue-cli 3.0创建项目并集成测试工具。
摘要由CSDN通过智能技术生成

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在提供了经过测试的单元的情况下,系统集成过程将会大大地简化。开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上,而不是陷入充满很多Bug的单元之中不能自拔。

流行框架

1. jest

​Jest 是一个由 facebook 开发的测试运行器,内置Jsdom、断言库和mock,vue-test-utils 官网评价

  • jsdom 由纯javascript实现的一系列 web标准,特别是 WHATWG(Web Hypertext Application Technology Working Group /Web超文本应用技术工作组)组织制定的DOM和HTML标准, 项目的目标是模拟足够的Web浏览器子集

Jest 是功能最全的测试运行器。它所需的配置是最少的,默认安装了 JSDOM,内置断言且命令行的用户体验非常好。不过你需要一个能够将单文件组件导入到测试中的预处理器。我们已经创建了 vue-jest 预处理器来处理最常见的单文件组件特性,但仍不是 vue-loader 100% 的功能。

2. karma + mocha + chai + sinon

Karma 是一个启动浏览器运行测试并生成报告的测试运行器

Mocha 是一个在node.js 和浏览器上运行的功能丰富的JavaScript测试框架, 能良好的支持javascript异步的单元测试

Chai 是一个适用node.js和浏览器端的 BDD(行为) / TDD 断言库

  • TDD (Test-Driven Development) 测试驱动开发,注重测试逻辑

  • BDD (Behaviour-Driven Development) 行为驱动开发, 注重输出结果

Sinon 是一个独立的 JavaScript 测试spy, stub, mock库,没有依赖任何单元测试框架工程

  • spy (监听) 生成一个间谍函数,记录下函数调用的参数,返回值,this的值,以及抛出的异常

  • stub (存根) 用简单的行为替换复杂的行为,例如父子组件调用,但是子组件没有完成,可以用一个stub替代,告诉父组件这里有一个子组件

  • mock (模仿)生成代码中使用的假数据对象,验证预期

vue test utils

vue test utils 是 Vue.js 官方的单元测试实用工具库, 支持主流js测试运行器,是一个基于包裹器的 API,同步触发事件。因此 Vue.nextTick 不是必须的。

安装

vue.2.0老项目默认已经安装并配置好了 webpack、vue-loader 和 Babel,可以通过下面的方法添加测试模块

1. 使用 jest 测试单文件组件

安装依赖

​# 安装 jest @vue/test-utils
npm install --save-dev jest @vue/test-utils

# 安装vue-jest, 在 Jest 中处理vue文件需要安装 vue-jest 预处理器:
npm install --save-dev vue-jest

# 安装 babel-jest
npm install --save-dev babel-jest

# 安装 jest 快照插件
npm install --save-dev jest-serializer-vue

在根目录新建 test/unit 目录,添加 jest 配置文件 jest.conf.js

const path = require('path')

module.exports = { 
  rootDir: path.resolve(__dirname, '../../'),  
  moduleFileExtensions: [   
    'js',    
    'json',    
    // 告诉 Jest 处理 `*.vue` 文件
    'vue'
  ],  
  moduleNameMapper: {   
     // 用 `vue-jest` 处理 `*.vue` 文件
    '^@/(.*)$': '<rootDir>/src/$1'
  },  
  transform: {  
    '^.+\\.js$': '<rootDir>/node_modules/babel-jest', // 用 `babel-jest` 处理 `*.js` 文件
    '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest' // 用 `vue-jest` 处理 `*.vue` 文件
  }, 
  snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'], // 快照插件
  setupFiles: ['<rootDir>/test/unit/setup'], // 在每次测试之前运行一些代码来配置或设置测试环境
  verbose: true,  
  testURL: 'http://localhost/', 
  collectCoverage: true, // 打开代码覆盖率收集功能
  coverageDirectory: '<rootDir>/test/unit/coverage', // 生成代码覆盖率报告文件夹目录
  // 定义需要收集测试覆盖率信息的文件路径
  collectCoverageFrom: [   
    'src/**/*.{js,vue}',    
    '!src/main.js',    
    '!src/router/index.js',    
    '!**/node_modules/**'
  ],  
  // 测试覆盖率报告模版
  coverageReporters: ['html', 'text-summary']
}

配置 test/unit/setup.js 文件, 不是必须

import Vue from 'vue'
// 去除生产环境警告
Vue.config.productionTip = false

配置测试环境 .babelrc

{
  ...
  "env": {
    "test": {
      "presets": [
        ["env", { "targets": { "node": "current" }}]
      ]
    }
  }
}

配置 package.json 测试脚本

// package.json
{
  "scripts": {
    "unit": "jest --config test/unit/jest.conf.js --coverage --updateSnapshot"
  }
}

当被测试内容修改后,重新生成快照片会报错,加上 --updateSnapshot 可以消除

测试文件可以放在 test/unit/spec/ 文件下,命名方式如 *.spec.js 或 *.test.js,je

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值