当前位置:   article > 正文

Vue Test Utils

vue test utils

单元测试(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 测试单文件组件

安装依赖

  1. # 安装 jest @vue/test-utils
  2. npm install --save-dev jest @vue/test-utils
  3. # 安装vue-jest, 在 Jest 中处理vue文件需要安装 vue-jest 预处理器:
  4. npm install --save-dev vue-jest
  5. # 安装 babel-jest
  6. npm install --save-dev babel-jest
  7. # 安装 jest 快照插件
  8. npm install --save-dev jest-serializer-vue

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

  1. const path = require('path')
  2. module.exports = {
  3. rootDir: path.resolve(__dirname, '../../'),
  4. moduleFileExtensions: [
  5. 'js',
  6. 'json',
  7. // 告诉 Jest 处理 `*.vue` 文件
  8. 'vue'
  9. ],
  10. moduleNameMapper: {
  11. // 用 `vue-jest` 处理 `*.vue` 文件
  12. '^@/(.*)$': '<rootDir>/src/$1'
  13. },
  14. transform: {
  15. '^.+\\.js$': '<rootDir>/node_modules/babel-jest', // 用 `babel-jest` 处理 `*.js` 文件
  16. '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest' // 用 `vue-jest` 处理 `*.vue` 文件
  17. },
  18. snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'], // 快照插件
  19. setupFiles: ['<rootDir>/test/unit/setup'], // 在每次测试之前运行一些代码来配置或设置测试环境
  20. verbose: true,
  21. testURL: 'http://localhost/',
  22. collectCoverage: true, // 打开代码覆盖率收集功能
  23. coverageDirectory: '<rootDir>/test/unit/coverage', // 生成代码覆盖率报告文件夹目录
  24. // 定义需要收集测试覆盖率信息的文件路径
  25. collectCoverageFrom: [
  26. 'src/**/*.{js,vue}',
  27. '!src/main.js',
  28. '!src/router/index.js',
  29. '!**/node_modules/**'
  30. ],
  31. // 测试覆盖率报告模版
  32. coverageReporters: ['html', 'text-summary']
  33. }

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

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

配置测试环境 .babelrc

  1. {
  2. ...
  3. "env": {
  4. "test": {
  5. "presets": [
  6. ["env", { "targets": { "node": "current" }}]
  7. ]
  8. }
  9. }
  10. }

配置 package.json 测试脚本

  1. // package.json
  2. {
  3. "scripts": {
  4. "unit": "jest --config test/unit/jest.conf.js --coverage --updateSnapshot"
  5. }
  6. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/820750
推荐阅读
相关标签
  

闽ICP备14008679号