前端单元测试mocha、karma、travis-ci梳理

前言

本章是我学习前端单元测试的一个梳理和总结,进入主题:

1.什么是前端单元测试

测试是什么:为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果。

对于前端开发过程来说,这里的特定目标就是指我们写的代码,而工具就是我们需要用到的测试框架(库)、测试用例等。检测处的结果就是展示测试是否通过或者给出测试报告,这样才能方便问题的排查和后期的修正。

2.为什么要做单元测试

  某些库可能会被多个地方使用,需要保证它未来能够保持稳定性,这样以后在修改代码的时候不用大量去回归原来的代码

3.一些概念

  TDD:测试驱动

  BDD:行为驱动

  语法上的差异只是前者在做断言,后者在做描述

  出现BDD的原因是希望项目经理能写,希望PD在写story的时候就把测试用例写了,所以它强调的是多角色在生产链路上的协同问题,所以用TDD型的语法测试用例和BDD型的语法测试用例没有什么差别。

4.一些例子

  mocha:mocha是一个功能丰富的测试框架,也就是运行测试的工具,

  travis-ci:持续集成工具,相当于一个docker容器,每次发布代码会把代码拉到docker容器,然后执行一些你想执行的东西

  karma:浏览器测试框架,可以搭配mocha、should.js等一起使用,为了让测试用例可以跑在真实的浏览器中,并且同时可以跑多个浏览器,可以检测浏览器的兼容性。mac没有IE,可以使用https://www.browserling.com/

    主要是在填karma.conf.js

    karma的原理主要是把代码放过去以后如何把测试的结果同步给node,用websocket做通讯,联动浏览器和node。webpack的热重载也是用websocket做通讯

断言库:做单元测试是需要写测试脚本的,那么测试脚本就需要用到断言库

  mocha不限制使用哪一种断言库,它需要先引入断言库,如:

var should=require(‘should‘);

  mocha的使用先推荐一下阮一峰老师的教程http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html

  

4.1mocha简单使用:

    安装mocha:

npm install mocha -g

    写一个测试模块:

// add.js
var add = require(‘./add.js‘);
var expect = require(‘chai‘).expect;

describe(‘加法函数的测试‘, function() {
  it(‘1 加 1 应该等于 2‘, function() {
    expect(add(1, 1)).to.be.equal(2);
  });
});

    测试脚本:因为上面是add.js,所以通常,测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)或者.spec.js(表示规格)。比如,add.js的测试脚本名字就是add.test.js

// add.test.js
var add = require(‘./add.js‘);
var expect = require(‘chai‘).expect;

describe(‘加法函数的测试‘, function() {
  it(‘1 加 1 应该等于 2‘, function() {
    expect(add(1, 1)).to.be.equal(2);
  });
});

    控制台运行:

mocha

    结果:

4.2 travis-ci简单使用:

我的代码:https://github.com/pidanooo/exercise2

项目目录:

测试模块:

// lib/add.js
function add(a, b) {
  // 实现该函数
  let arr, brr, plus = 0, final = [];
  const max = Math.max(a.length, b.length);
  arr = a.padStart(max, ‘0‘).split(‘‘);
  brr = b.padStart(max, ‘0‘).split(‘‘);

  for (let i = arr.length - 1; i >= 0; i--) {
    const num = (parseInt(arr[i]) + parseInt(brr[i]) + plus).toString();
    if (num > 9) {
      plus = 1
    } else {
      plus = 0;
    }
    const result = num.split(‘‘)[num.length - 1];
    final.unshift(result);
  }
  if (plus === 1) {
    final.unshift(‘1‘);
  }
  return final.join(‘‘);
}

module.exports = add

测试脚本:

// test/test.js
var add = require(‘../lib/add‘);
require(‘should‘);

describe(‘大数相加add方法‘, function () {
  it(‘字符串"42329"加上字符串"21532"等于"63861"‘, function () {
    add(‘42329‘, ‘21532‘)
      .should.equal(‘63861‘)
  })

  it(‘"843529812342341234"加上"236124361425345435"等于"1079654173767686669"‘, function () {
    add(‘843529812342341234‘, ‘236124361425345435‘)
      .should.equal(‘1079654173767686669‘)
  })
})

主要是配置.travis.yml文件

language: node_js
node_js:
  - "8"
  - "10"
before_install:
  - npm install -g mocha 

登录https://travis-ci.org/ 并登录自己的github账号,之后点击settings

然后可以看到自己的仓库,把你需要的打开,就能跑起来了:

点击项目看看跑的怎么样:

当出现绿色的passing的时候就说明跑成功了,以后修改了代码再来看一下,就能知道有没有问题;

我们看一些开源的库都会有这个玩意儿,如egg.js:

4.3 karma简单使用

我的代码:https://github.com/pidanooo/exercise3

目录结构:

全局安装

npm install -g karma-cli

安装所有依赖

npm install

初始化一下

karma init

主要是配置karma.config.js

// Karma configuration
// Generated on Tue Aug 06 2019 22:07:56 GMT+0800 (GMT+08:00)

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: ‘‘,

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: [‘mocha‘],  // 测试框架

    // list of files / patterns to load in the browser
    files: [
      ‘https://cdn.bootcss.com/jquery/2.2.4/jquery.js‘,
      ‘node_modules/should/should.js‘,
      ‘test/**.js‘
    ],  // html会引用这些文件

    // list of files to exclude
    exclude: [
    ],

    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },

    // test results reporter to use
    // possible values: ‘dots‘, ‘progress‘
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: [‘progress‘],  // 控制台的报表

    // 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‘],   // 选择的浏览器,要在package.json的devDependencies中添加对应的launcher  如 karma-firefox-launcher

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,   // 是否只跑一遍,比如放在travis-ci的话就要设置为true,否则会把容器一直占用

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  })
}

运行一下:

karma start
reporters: [‘progress‘]  在控制台会输出:

会打开浏览器:

好嘞,我已经成功了!

 

原文地址:https://www.cnblogs.com/jingouli/p/11674709.html

时间: 2024-08-04 15:08:55

前端单元测试mocha、karma、travis-ci梳理的相关文章

单元测试工具 - karma

在离开上一家公司之前,team leader 在我离开前留给了我最后几个关键字:karma,断言库,JASMINE,QUNIT,MOCHA. 可一直拖拖沓沓的,没有去了解.直到今天,才终于抽出心情和时间来研究它. 在文章开始之前,首先对前 team leader — 满爷 表示感激. 虽然你不是我所见过的最优秀的前端,但你是我所见的最乐意与小伙伴share经验心得的 team leader. OK,言归正传,开始主题... 关于karma Karma是一个基于Node.js的JavaScript

浅谈前端单元测试

前一段时间开始了解前端单元测试,前端测试自动化,记录下自己对前端测试的理解,帮助加深印象,和开始了解前端测试的同学. 注: 个人理解可能有所偏差,欢迎指正 下面要讲的内容主要分为以下几点: 1. 什么是单元测试 2. 为什么要进行单元测试 3. 单元测试可以测什么 4. 测试分类 ( TDD, BDD, DDD,  MDD) 5. 单元测试框架 ( Qunit, Sinon, Jasmine, phantomjs , totoro, mocha) --> 测试框架 ( JSTD, Karma,

为 iOS 建立 Travis CI

你是否曾经试着为 iOS 项目搭建一台支持持续集成的服务器,从我的个人经验而言,这可不是一个轻松的活.首先需要准备一台 Mac 电脑,并安装好全部所需的软件和插件.你要负责管理所有的用户账户,并提供安全保护.你需要授予访问仓库的权限,并配置所有的编译步骤和证书.在项目运行时期,你需要保持服务器的稳健和最新. 最后,原本你想节省的时间,会发现你花费了大量的时间去维护这台服务器.不过如果你的项目托管在 GitHub) 上,现在有了新的希望:Travis CI.该服务可以为你的项目提供持续集成的支持,

基于Travis CI搭建Android自动打包发布工作流(支持Github Release及fir.im)

最近付费购买了Travis CI,Travis CI的收费模式很有意思,不是按项目或者用户,而是按工作进程收费,比如初级版本是$129/月,总共提供2个工作进程.在项目不多的情况下,除了用于跑单元测试外,不免想利用的更充分一些,因此抽空搭建了一套基于Travis CI的Android自动发布工作流. 未自动化前安卓开发总是避免不了这样的工作流程: 开发一些新功能,提交代码 完成一部分功能后,打包一个测试版APK 将测试版APK上传到QQ群 / 网盘 / Fir.im / 蒲公英等 在QQ群或发布

iOS中 为 iOS 建立 Travis CI 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 你是否曾经试着为 iOS 项目搭建一台支持持续集成的服务器,从我的个人经验而言,这可不是一个轻松的活.首先需要准备一台 Mac 电脑,并安装好全部所需的软件和插件.你要负责管理所有的用户账户,并提供安全保护.你需要授予访问仓库的权限,并配置所有的编译步骤和证书.在项目运行时期,你需要保持服务器的稳健和最新. 最后,原本你想节省的时间,会发现你花费了大量的时间去维护这台服务器.不过如果你的项目托管在 GitHub

利用Travis CI 让你的github项目持续构建

Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列中,据说Travis CI每天运行超过4000次完整构建.对于做开源项目或者github的使用者,如果你的项目还没有加入Travis CI构建队列,那么我真的想对你说out了. 下面是本人的构建历史: 搭建Travis CI build,需要你有个github账号和github项目: 1:用gith

手把手教你使用Travis CI自动部署你的Hexo博客到Github上

简介 这年头要是没有个博客都不好意思给别人说你是程序员,我用XX笔记呀,不行吗?不行,这玩意儿要么不能公开分享,要么公开分享要会员,现在到处都是开源,自己学到了东西都不能分享给需要帮助的人,真是伤心呀.那么今天就来聊聊当你用Hexo搭建了博客,怎么自动更新呢,大家都知道Hexo是需要手动生成HTML静态网页的,虽然命令很少,但是每次写完博客先得推送到git然后在生成静态文件,再推送到服务器,想想我这个心也是醉了,不过看到知乎上还有人带着U盘,我只能呵呵了~,你们耐心真好~ 那我们今天就来说说怎么

Travis CI -- 免费的集成测试环境

Travis CI,是一个专门为开源项目打造的持续集成环境.如果你有一个放在Github上的开源项目,Travis CI是一个开源完美的CI选择.在Travis CI中 可以直接用Github账号登陆,然后配置自己项目的持续集成.下面说说用Travis CI实习我自己的开源Demo Java Web项目CI的配置. 实现Java Web项目的持续集成是非常简单的,分成2个部分: 第一部分:travis ci中项目配置 在Travis CI中登录Github帐号,选择自己需要持续集成的项目,点击项

Travis CI用来持续集成你的项目

这里持续集成基于GitHub搭建的博客为项目 工具: [email protected]:~$ node [email protected]:~$ git --version git version [email protected]:~$ travis --version1.8.4 Travis CI简介 Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI