jest 入门 (一)

目标 :

搭建jest环境

编写简单测试案例

介绍jest语法|常用jest匹配器

初始化项目

npm init

安装依赖

npm install -D jest babel-jest babel-core babel-preset-env regenerator-runtime @babel/preset-env

jest jest 测试工具 ,也可以全局安装 jest 工具 npm jest -g

babel-jest babel-core babel-preset-env regenerator-runtime @babel/preset-env 为了使用 es6 语法

添加.babelrc 文件

//.babelrc

{ "presets": ["@babel/preset-env"] }

修改 package.json 中的 test 脚本

//package.json

"scripts": {
    "test": "jest"
}

新建 src 文件(主要代码) test 文件(测试代码)

jest 会识别项目中 所有 .test || .spec 文件 例如 demo.tes.js demo.spec.js

测试文件在实际项目中应该与模块放到一起 , 我这里新建 test 文件夹只为了方便演示

mkdir src/util.js
mkdit src/util.test.js

src 中新增案例文件 util.js 与代码

mkdir src/util.js

// src/util.js

const sum = (a,b) => {
    return a+b
}

mkdir src/util.test.js

// src/util.test.js`
import { sum } from "./util";

test("sum(2 + 2) 等于 4", () => {
  expect(sum(2, 2)).toBe(4);
});

常用匹配器

expect 方法可以内置不同匹配器 , 上面的 toBe 函数就是其中一个匹配器 用于 对比返回结果断言

toBe 用于判断函数值是否符合预期

not 用于 toBe 组合使用

expect(sum(2, 2)).not.toBe(5) //true;
expect(sum(2, 2)).not.toBe(4) //false;

toEqual 与 toBe 功能一直 , 但是 toEqual 会把类型也进行对比 类似于 === 与 ==

expect(sum(2, 2)).toEqual("4") //false;
expect(sum(2, 2)).toBe("4") //true;

toHaveLength 可以很方便的用来测试字符串和数组类型的长度是否满足预期

function getArr(){
    return [1,2,3,4]
}
function getStr){
    return "1234"
}
expect(getArr().toHaveLength(4) //true;
expect(getStr().toHaveLength(4) //false;

toThorw 用于检查函数是否异常,必须对函数进行封装

test("异常检查", () => {
function sumTestError(){
    sum()
}
expect(sumTestError().toThrow("sum函数异常"));
});

toMatch 用于对结果进行正则判断

expect(sum(2,2).toMatch(/\d/)); //true

异步断言 , 利用 expect.assertions() 函数做

function asyncFn(){
    return new Promise((resolve,reject)=>{
        resolve("hello world")
    })
}

test('asyncFn() 异步方法测试', () => {
  //异步方法前必须使用expect.assertions(1)来定义有一个异步方法
  expect.assertions(1);
  return asyncFn().then(data => {
      expect(data).toBe('hello world');
    });
})

async await 版本

function asyncFn(){
    return new Promise((resolve,reject)=>{
        resolve("hello world")
    })
}

test('asyncFn() 异步方法测试',async () => {
  //异步方法前必须使用expect.assertions(1)来定义有一个异步方法
  expect.assertions(1);
  const data = await asyncFn();
  expect(data).toBe('hello world');
})

参考资料

【1】 Jest 官方文档(https://jestjs.io/zh-Hans/)

【2】 Jest Crash Course - Unit Testing in JavaScript(https://www.youtube.com/watch?v=7r4xVDI2vho)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容