博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单元测试 -- mocha + chai
阅读量:6048 次
发布时间:2019-06-20

本文共 2272 字,大约阅读时间需要 7 分钟。

单元测试

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作

可以理解为对功能的基本验证

目前node中的测试框架,一般使用的是 mocha + 断言库 chai

安装

npm install mocha -gnpm install mochanpm install chai复制代码

mocha && chai

mocha API

describe

describe 是一个 用例测试集, 他可以进行嵌套

describe('进行首页的测试', function() {  // ....})复制代码

it

一个it对应一个单元测试用例

it('测试接口xxx', function() {  // ....})复制代码

only skip

only -- 在当前的父describe块下,只执行该单元的测试

skip -- 在当前的父describe块下,跳过该单元的测试

describe('Array', function() {  describe.only('父describe块下只执行该测试单元', () => {    it.skip('跳过的测试单元', () => { });  })})复制代码

describe 和 it 都可以使用这两个方法

timeout - 设超时

测试集合上定义超时时间,会对这个测试集合中所有的测试用例和测试集合起作用

const sleep = time => new Promise(resolve => setTimeout(resolve, time)) it('timeout', async function () {    this.timeout(1000)    await sleep(3000)    expect(true).to.be.ok  })复制代码

hooks

提供了几个函数,在特定的事件发生时被触发

before()、after()、beforeEach()、afterEach()

同一个describe下的执行顺序为before、beforeEach、afterEach、after

before, after 执行一次

beforeEach,afterEach 每一个测试用例都会触发一次

before(() => console.info('首页测试开始'))after(() => console.info('首页测试结束'))beforeEach('check check check ', function() {  console.log('i am check')})复制代码

chai API

chai有三种断言风格,expect,should,assert, 我的项目使用的是 expect

expect

列出几个常用的方法

方法 含义
equal 相等(严格比较)
not 取反
include 包含
  • 判断数据类型
expect('username').to.be.a('string')    expect(false).to.be.a('boolean')    expect(obj).to.have.property('foo')复制代码

异步测试

项目中的大部分函数为异步的,这个需要借助 done 来处理

it(`处理异步请求`, (done) => {  // ...  done()})复制代码

异步函数在函数内部手动调用done()表示测试成功,done(err)表示测试出错

async await 可以不使用done

it('更新用户对于文章的态度', async () => {    const result = await updateAttitude({ articleId: 123, userId: 131, status: 0})    expect(result).to.be.a('number')  })复制代码

最常见的接口测试

it('获取某一个频道下的所有文章列表', async function ()  {    const result = await chai      .request(app)      .get('/articles/3/1')      .then((res) => {        return res.body      })    expect(result).to.have.property('data')  })复制代码

测试结果检查

测试报告

生成测试报告使用的是 mochawesome 模块

"mocha:report": "mocha --reporter mochawesome"复制代码

会自动在项目创建 一个 mochawesome-report 目录,

测试覆盖率

简单来说,就是判断你的测试用例对于函数的覆盖程度

npm install -g istanbul复制代码

生成测试率覆盖报告

istanbul cover _mocha -- -R spec复制代码

注: 这里是 _mocha 不要丢掉这下划线

会在项目中自动创建 coverage 文件夹

在浏览器中打开

open coverage/lcov-report/index.html复制代码

other

  • 是否所有的函数都要编写测试用例

接口是肯定需要编写测试用例的,至于是否需要对函数做处理,个人感觉可以对重要的函数进行测试

参考文章

转载地址:http://nhxex.baihongyu.com/

你可能感兴趣的文章
经典算法题每日演练——第二题 五家共井
查看>>
存储过程中拼接的变量和点的问题
查看>>
ASP.NET那点不为人知的事(一)
查看>>
3.16
查看>>
表单文件上传与文件下载
查看>>
下午考
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>
Dubbo OPS工具——dubbo-admin & dubbo-monitor
查看>>
Dungeon Master ZOJ 1940【优先队列+广搜】
查看>>
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
查看>>
2013年7月12日“修复 Migration 测试发现的 Bug”
查看>>
学习vue中遇到的报错,特此记录下来
查看>>
CentOS7 编译安装 Mariadb
查看>>