目标:

  • 为已有的vue项目搭建 karma+mocha+chai 测试框架
  • 编写组件测试脚本
  • 测试运行通过
  • 抽出共通

一、初始化项目

新建项目文件夹并克隆要测试的已有项目 webAdmin-web

转到项目根目录,安装项目依赖:

#npm install

 谁安装失败就单独再安装它(如:chromedriver安装失败,#npm install chromedriver) 

二、搭建karma+mocha+chai测试环境

1、安装插件

#npm install karma --save-dev
#npm install -g karma-cli
#npm install --save-dev mocha
#npm install --save-dev karma-mocha
#npm install --save-dev chai // 断言库
#npm install --save-dev karma-chai
#npm install --save-dev sinon-chai
#npm install --save-dev sinon
#npm install --save-dev karma-sinon-chai
#npm install --save-dev karma-webpack
#npm install --save-dev karma-coverage
#npm install --save-dev karma-spec-reporter
#npm install --save-dev karma-sourcemap-loader
#npm install --save-dev nib
#npm install --save-dev opn
#npm install --save-dev karma-chrome-launcher

2、生成配置文件 karma.conf.js

之前全局安装了karma-cli,便于引导我们生成karma.conf.js配置文件。

 #karma init

          配置文件已经自动生成,位置就在文件根目录。若用命令【#karma init 自定义配置名.conf.js】,则生成的配置文件名称就是“自定义配置名.conf.js”。

3、在项目根目录下运行karma

#karma start karma.conf.js

运行结果:

目前/test/unit/下还没有*specs.js文件,故而显示的结果是执行0错误0。

4、编写简单的测试case 【正确顺序:先修改karma配置文件(转至本文 5),再编写测试脚本,进行karma测试】

  • 在/src 下新建测试代码文件夹 testSrc,新建测试文件add.js,文件结构如下:

  • /src/testSrc/add.js 内容如下:
  /**
   * 加法
  * @param x 参数1
  * @param y 参数2
  */
  export function add (x, y) {
  return x + y
  }
  • 编写对应的测试脚本 /test/unit/specs/add.specs.js :
  import {add} from '@/testSrc/add.js'
  var expect = require('chai').expect   describe('加法函数的测试', function() {
  it('1 加 1 应该等于 2', function() {
   expect(add(1,1)).to.be.equal(2)
  })
  })
  • 测试运行:#karma start
  • 测试结果:报错 —— import declarations may only appear at top level of a module

  • 原因分析:测试脚本没有被webpack打包,也可以说是karma没有配置webpack配置信息,所以karma start的时候不能直接用 import语法 。
  • 解决方法:修改karma配置文件 karma.conf.js【转至本文 5、修改karma配置文件
  • 修改配置文件后,再次运行 #karma start
终端运行过程:

[user1@localhost webAdmin-web]$ karma start
webpack: wait until bundle finished: // 等待webpack打包绑定完成
Hash: f11981cb4ab6cc3cc7ca
Version: webpack 2.7.0
Time: 11959ms
Asset Size Chunks Chunk Names
static/img/401.089007e.gif 164 kB [emitted]
static/img/404.a57b6f3.png 98.1 kB [emitted]
0.bundle.js 93.8 kB 0 [emitted]
app 5.46 MB 1 [emitted] [big] app
test/unit/specs/add.specs.js 216 kB 2 [emitted] test/unit/specs/add.specs.js ..... //非常长的一段文件解析过程

ERROR in ./test/unit/specs/add.specs.js                                                              // 错误信息

✘ http://eslint.org/docs/rules/no-undef 'describe' is not defined
test/unit/specs/add.specs.js:4:1
describe('加法函数的测试', function() {
^

✘ http://eslint.org/docs/rules/space-before-function-paren Missing space before function parentheses
test/unit/specs/add.specs.js:4:29
describe('加法函数的测试', function() {
^

✘ http://eslint.org/docs/rules/no-undef 'it' is not defined
test/unit/specs/add.specs.js:5:3
it('1 加 1 应该等于 2', function() {
^

✘ http://eslint.org/docs/rules/space-before-function-paren Missing space before function parentheses
test/unit/specs/add.specs.js:5:30
it('1 加 1 应该等于 2', function() {
^

✘ http://eslint.org/docs/rules/comma-spacing A space is required after ','
test/unit/specs/add.specs.js:6:17
expect(add(1,1)).to.be.equal(2)
^

✘ http://eslint.org/docs/rules/eol-last Newline required at end of file but not found
test/unit/specs/add.specs.js:8:3
})
^

✘ 6 problems (6 errors, 0 warnings)

webpack: Failed to compile.                                                        // webpack:编译失败

// 接下来是karma测试的结果,见下面的截图

  • 查看覆盖率报告文件 /test/unit/coverage/

找到对应的报告文件,复制文件路径,在浏览器打开查看:

 浏览器中:

修改错误:详见 解决未安装unit测试和jest的Vue项目运行karma start时的错误

5、修改karma配置文件

主要是在 karma.conf.js 中引入webpack配置、修改框架frameworks信息、预处理器、新增插件、修改reporters、新增coverageReporter(karma测试结果覆盖率报告文件)。修改后的配置文件如下:

// Karma configuration
// Generated on Mon Jan 15 2018 20:50:28 GMT+0800 (CST) // 引入webpack配置
const webpackConfig = require('./build/webpack.base.conf'); module.exports = function(config) {
config.set({
// 引入webpack
webpack: webpackConfig, // base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '', // frameworks to use -- 修改,增加'sinon-chai'
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['mocha', 'sinon-chai'], // 测试入口文件--测试脚本
// list of files / patterns to load in the browser
files: [
'test/unit/**/*.specs.js'
], // list of files / patterns to exclude
exclude: [
], // 预处理器--增加webpack、sourcemap、coverage
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'test/unit/**/*.specs.js': ['webpack', 'sourcemap', 'coverage']
}, // 新增插件
plugins: [
'karma-webpack',
'karma-sourcemap-loader',
'karma-mocha',
'karma-chai',
'karma-sinon-chai',
'karma-firefox-launcher',
'karma-chrome-launcher',
'karma-spec-reporter',
'karma-coverage'
], // test results reporter to use
// possible values: 'dots', 'progress'--新增spec、coverage
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['spec', 'coverage', 'progress'], // 新增覆盖率报告
coverageReporter: {
// dir: './coverage',
dir: './test/unit/coverage',
reporters: [
{ type: 'html', subdir: 'report-html' },
{ type: 'lcov', subdir: '.' },
{ type: 'text-summary' }
]
}, // web server port
port: 9876, // enable / disable colors in the output (reporters and logs)
colors: true, // level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes
autoWatch: true, // start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome', 'Firefox'], // Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false, // Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}

6、抽出共通

--- 下一篇学习对组件进行测试。

资料:

1、karma官网/intro/installation【安装】

2、karma官网/intro/Configuration 【配置】

3、Vue.js 项目使用 Karma 做自动化UI测试小结 #58

4、测试框架 Mocha 实例教程

#单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(一)的更多相关文章

  1. #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)

    学习对vue组件进行单元测试,先参照官网编写组件和测试脚本. 1.简单的组件 组件无依赖,无props 对于无需导入任何依赖,也没有props的,直接编写测试案例即可. /src/testSrc/si ...

  2. 大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试

    一. 前端自动化测试 大多数前端开发者对测试相关的知识是比较缺乏的,一来是开发节奏很快,来不及写,另一方面团队里也配备了"人肉测试机",完全没必要自己来.但随着项目体量的增大,许多 ...

  3. 搭建 vue2 单元测试环境(karma+mocha+webpack3)

    从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...

  4. 使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)

    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频) 使用 TypeScript & mocha & chai 写测试代码实战 #1 ...

  5. 自动化单元测试(Karma + Mocha)

    使用 Karma + Mocha做单元测试 Karma([ˈkɑrmə] 卡玛)是一个测试运行器,它可以呼起浏览器,加载测试脚本,然后运行测试用例 Mocha([ˈmoʊkə] 摩卡)是一个单元测试框 ...

  6. 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js

    目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...

  7. 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)

    摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...

  8. 【原创】从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(二)

    摘要:上篇文章说到了如何新建工程,并启动一个最简单的Electron应用.“跑起来”了Electron,那就接着把Vue“跑起来”吧.有一点需要说明的是,webpack是贯穿这个系列始终的,我也是本着 ...

  9. 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新

    导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...

随机推荐

  1. PIE SDK地图放大镜

    放大镜,在地图的浏览过程中在主地图和次地图中起到很好的辅助作用, 要实现放大镜功能主要就是通过两个mapControl控件,主地图控件是mapControlMain,放大镜控件是UserControl ...

  2. nginx 问题总结

    1, 403错误 403是很常见的错误代码,一般就是未授权被禁止访问的意思. 可能的原因有两种:Nginx程序用户无权限访问web目录文件Nginx需要访问目录,但是autoindex选项被关闭 修复 ...

  3. shell基础优化脚本

    #!/bin/bash ######################################################### #Created Time: Tue Aug 7 01:29 ...

  4. 请求网络图片缓存到本地 ,还有一些现成的图片加载框架的使用 Ace网络篇(一)

    现在去买年货~~~~~~ 占坑, 现在来填坑 填完睡觉,感谢这俩月的把自己往死里逼得奋斗从JAVA什么都不懂到现在,做这些也是给在自学路上的新人(我也是菜鸟)一点点我力所能及的帮助,等我水平更高了还会 ...

  5. PLSQL Developer 客户端工具的安装

    安装之前先把客户端工具instantclient_12_1拷贝到一个没有中文和空格的目录中去, 比如我直接放到了D:\tools下面.注意这里需要的是32bit的. 下面开始安装PLSQL Devel ...

  6. groovy与javah互相调用

    暂时只找到这几种方法.groovy代码方便灵活.常用来写一些工具.一般都是java加入groovy代码 第一种 java中加入 groovy代码就是 Toy.groovy class Toy{ def ...

  7. Ubuntu以及CentOS7修改ssh端口号详细步骤

    1.Ubuntu修改ssh端口号步骤: 1.修改sshd.config文件.执行vim etc/ssh/sshd_config.增加上我们需要增加的ssh的端口号.图例增加了5309的端口号. ESC ...

  8. pat02-线性结构2. 一元多项式求导 (25)

    02-线性结构2. 一元多项式求导 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 设计函数求一元多项式的导数.(注:xn(n为整 ...

  9. React.js 小书 Lesson18 - 挂载阶段的组件生命周期(一)

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson18 转载请注明出处,保留原文链接和作者信息. 我们在讲解 JSX 的章节中提到,下面的代码: ...

  10. Docker进阶

    Docker进阶 Docker容器命名与重命名 命名 docker run -it -p 80:80 --name containerName img:tag /bin/bash 重命名 docker ...