jest单测一期

在写单测前,我们总是带着疑问和抗拒,写单测既会消耗我们的开发时间,拖慢项目进度,又要耗费精力去思考单测内容,对于未接触过的同学来说,甚至还要去学习单测的语法,那为什么我们要去写单测呢?

1.单测会有效的减低bug率,或许大家会想:不就改个 Bug,改几行而已。 可是大家有没有想过在跟测的过程中,很可能你已经开始另一个需求的评审了! 此时的你在解决突然插入的 Bug 的时候,会拖下一个需求的时间,影响大伙打工的心态。

2.对于老代码的优化,古老的代码甚至于几个月没有碰过的代码,突然优化个需求对于程序猿们来说都是个让人抗拒的工程,我们害怕遇到的情况是:
崩溃啦.gif

此时一位背锅的倒霉蛋冉冉升起,而单测的独立性给了倒霉蛋自测后的底气,要问怎么给?写写就知道啦。

3.对于自身代码的理解性,完成需求时,总有段时间疾键盘如飞,也有段时间抓耳挠腮,打开一排度娘苦苦查询无果,好不容易怼出效果却不能充分理解其中精髓,上线后复盘?不,后面的需求已经堆成山了,那么少年想成为高手,写个自测吧,用mock加以苦练,融会贯通,修成正果。

此时一位老者徐徐走来,大手一挥,《Jest》,《Mocha》,《Tape》,少年需要哪本~
聪明的小伙伴已经选择了JEST

为什么要用JEST

1.比较新
2.基础好
3.速度快
4.API简单
5.隔离性好
6.IDE整合(vscode)
7.多项目运行
8.覆盖率可视化

来不及解释了,上车

怎么用

初始化配置

执行命令

npm --init
npm install jest

下载jest(@24.8.0基本稳定)时直接默认所有选项,将得到配置文件,在配置好jest.config.js的coverageDirectory(覆盖率文件)项以及package.json文件的运行命令后,我们就可以开始jest入门了

jestconfig.png
//package.json
 "scripts": {
    "test": "jest"
  },
人生第一个jest

1.首先我们创建一个js文件honglanman.js并暴露出两个函数(暂时使用commonJs模块规范,若要使用es6模块规范得配置babel)

function dabaojian1(val){
  if(val>200){
    return '至尊会员'
  }else{
    return '普通会员'
  }
}
function dabaojian2(val){
  if(val>1000){
    return '双人服务'
  }else{
    return '单人服务'
  }
}
module.exports ={dabaojian1,dabaojian2}

2.建立一个对应的测试文件honglanman.test.js

const dabaojian =  require('./honglanman.js')

let{ dabaojian1,dabaojian2} = dabaojian
test('保健1-100',()=>{
  expect(dabaojian1(100)).toBe('至尊会员')  
})
//test('对于该条测试的描述',()=>{
//    期待(执行函数).匹配('结果')
// })

test('保健2-10000',()=>{
  expect(dabaojian2(10000)).toBe('双人服务')
})

3.运行我们的测试文件

npm run test

4.读取测试结果

> jest

 FAIL  ./honglanman.test.js
  ✕ 保健1-100 (6ms)         //保健1失败
  ✓ 保健2-10000               //保健2通过   

  ● 保健1-100

    expect(received).toBe(expected) // Object.is equality

    Expected: "至尊会员"              //期待得到至尊会员待遇
    Received: "普通会员"              //实际得到普通会员待遇

      4 |
      5 | test('保健1-100',()=>{
    > 6 |   expect(dabaojian1(100)).toBe('至尊会员')  
        |                           ^
      7 | })
      8 | //test('对于该条测试的描述',()=>{
      9 | //    期待(执行函数).匹配('结果')

      at Object.<anonymous> (honglanman.test.js:6:27)

  console.log honglanman.test.js:3
    {
      dabaojian1: [Function: dabaojian1],
      dabaojian2: [Function: dabaojian2]
    }

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 passed, 2 total
Snapshots:   0 total
Time:        0.956s

此时我们只需要修改honglanman.js的会员价格,让100也能享受至尊会员的待遇

function dabaojian1(val){
  if(val>99){
    return '至尊会员'
  }else{
    return '普通会员'
  }
}
function dabaojian2(val){
  if(val>1000){
    return '双人服务'
  }else{
    return '单人服务'
  }
}
module.exports ={dabaojian1,dabaojian2}

再次执行得到结果

> jest

 PASS  ./honglanman.test.js
  ✓ 保健1-100 (2ms)
  ✓ 保健2-10000

  console.log honglanman.test.js:3
    {
      dabaojian1: [Function: dabaojian1],
      dabaojian2: [Function: dabaojian2]
    }

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.874s, estimated 1s
Ran all test suites.

测试通过
5.查看覆盖率
之前我们在jest.comfig.js内部配置的项作用来了

coverageDirectory: 'coverage', //设置覆盖率报表文件和获取命令

运行覆盖率报表命令

npx jest --coverage

生成覆盖率报表文件夹coverage,内部的index.html文件我们可以直接可视化了,我们依次可以直观的了解的数据有覆盖率,分支覆盖率,测试函数量,代码行的覆盖率


覆盖率报表.png

至此我们的第一个测试流程完结撒花~
回顾我们的第一个流程,有两个点未解决:
1.兼容es6写法
2.自动运行jest,避免每次修改完代码后都需要npm run

1,兼容es6我们可以通过配置babel解决,下载我们的babel的两个包

npm install @babel/core@7.4.5 @babel/preset-env@7.4.5

然后在跟目录下配置我们的.babelrc文件

{
  "presets":[
    [
      "@babel/preset-env",{
        "target":{
          "node":"current"
        }
      }
    ]
  ]
}

此时我们就可以使用我们的es6模板规范了
2.自动运行jest,我们只需要在pack.json中设置命令修改成

"scripts": {
    "test": "jest --watch"
  },

即可完成监听了,即刻试试吧~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容