Jest入门
注意:
jest是默认使用 CommonJs进行模块的导入导出, 如果需要使用 ES6的导入导出, 则需要babel编译器进行转化, 将 ES6 module 转为 CommonJs
-
下载babel编译器核心文件
npm i @babel/core@7.4.5 @babel/preset-env@7.4.5 --dev
注意: 7.4.5 是babel编译器的常用版本
-
项目根目录创建
.babelrc
, 并写入如下内容:{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
值得注意的是, 一般这种转化, 在用脚手架创建项目的时候就会处理好, 一般不需要额外处理
一. 安装Jest
-
npm 安装 Jest
npm install jest@24.8.0 --dev
-
安装 IDE对Jest的支持 (以 webstorm为列, 可无视此步)
依次点击
setting
/Language & Frameworks
/JavaScript
/Library
/download
/jest
即可 -
生成 jest测试配置文件
- npx jest --init
- 一直选择确定即可
-
验证是否操作成功
-
在项目根目录, 新建一个 foo.js, 并写入
function foo() { return "foo" } module.exports = { foo }
-
在同级 创建 foo.test.js, 并写入
const fooObj = require("./foo.js"); const {foo} = fooObj; test("第一个测试用例", ()=>{ expect(foo()).toBe("foo") })
-
在 命令行运行
jest
-
当有正常内容输出即为安装成功
-
注意上述, 这些步骤适用于初学测试者, 一般都是通过脚手架自动创建没有那么麻烦
代码覆盖率
在执行 npx jest --init
会生成代码覆盖率的配置, 一般来说是默认开启的
作用类似 webpack 的打包分析的插件
执行方法: jest --coverage
注意, 在执行的过程中有可能 出现缺包的情况, 把包装上重新运行, 实在不行就 重装 jest
二. 常用测试匹配器
1. 比较相等
1.1 严格相等
test("测试方法1-200", ()=>{
expect(foo1(200)).toBe("大于200")
})
1.2 值相等
test("toEqual值相等", ()=>{
let a = {name: 'wang'};
// expect(a).toBe({name: 'wang'}); // 用例不通过
expect(a).toEqual({name: 'wang'}); // 测试值相等
});
2. 数字匹配器
2.1 大于(小于) 匹配器
test("toBeGreaterThan匹配器", ()=>{
let a = 3;
// 测试 a 是否小于2
expect(a).toBeGreaterThan(2); // 大于
expect(a).toBeLessThan(4); // 小于
expect(a).toBeGreaterThanOrEqual(3); // 大于或者等于
expect(a).toBeLessThanOrEqual(4); // 小于或者等于
});
2.2 浮点比较匹配器
test("toBeCloseTo匹配器", ()=>{
let a = 0.1;
let b = 0.2;
// 测试 a 是否小于2
// expect(a + b).toEqual(0.3) // 0.30000000000000004
// 上述测试用例不会通过, 因为 js 本身的设计缺陷使之在浮点运算上存在问题
expect(a+b).toBeCloseTo(0.3); // 此时测试通过
});
3. 字符串匹配器
3.1 包含匹配器
// 类似于, indexOf
test("toMatch匹配器", ()=>{
const str = "wang, er, ma, zi";
expect(str).toMatch("wang"); // 类似于 indexOf
});
3.2 数组包含匹配器
test('test toContain', () => {
const arr = ["wang", "er", "ma", "zi"];
// expect(arr).toContain("wan"); // 测试用例不通过
// expect(arr).toContainEqual("wan") // 测试用例不通过
expect(arr).toContain("wang");
})
网友评论