01、Jest简介
安装
通过npm安装依赖.babel-jest、 babel-core、 regenerator-runtime、babel-preset-env这几个依赖是为了让我们可以使用ES6的语法特性进行单元测试,ES6提供的 import 来导入模块的方式,Jest本身是不支持的
npm install --save-dev jest babel-jest babel-core babel-preset-env regenerator-runtime
- 添加.babelrc文件
在项目的根目录下添加.babelrc文件,并在文件复制如下内容:
{ "presets": ["env"]
}
- 修改package.json中的test脚本
打开package.json文件,将script下的test的值修改为jest
"scripts": { "test": "jest"
}
使用
- sum.js
import axios from "axios"; function sum (a, b) {
return a+b;
}
function add (a, b) {
return a+b;
}
function fetchUser() {
return axios.get("http://jsonplaceholder.typicode.com/users/1")
.then(res => res.data)
.catch(error => console.log(error));
}
export {
sum,
fetchUser
}
- sun.test.js
import {sum , fetchUser} from "./sum"; // const fetchUser = require("./sum")
// 1. 相等判断:toBe 使用 Object.is 来判断相等,
// toEqual 会递归判断 Object 的每一个字段,
// 对数值来说 toBe 和 toEqual 相同;
test("两个数字相加", () => {
expect(sum(1,2)).not.toBe(2);
})
test("object assignment", () => {
const data = {one: 1};
data["two"] = 2;
expect(data).toEqual({one: 1, two: 2});
});
// 2. 判断符点数:可使用 toBeCloseTo 来解决 JS 浮点精度带来的问题,如下示例;
test("adding floating point numbers", () => {
const value = 0.1 + 0.2; // 0.30000000000000004
expect(value).toBeCloseTo(0.3); // 测试通过
});
test("fetchUser() 可以请求到一个含有name属性值为Leanne Graham的对象", () => {
expect.assertions(1);
return fetchUser()
.then(data => {
expect(data.name).toBe("Leanne Graham");
});
});
//上面调用了expect.assertions(1),它能确保在异步的测试用例中,
//有一个断言会在回调函数中被执行。这在进行异步代码的测试中十分有效。
test("mock", () => {
const mockCallback = jest.fn(x => 42 + x);
[0, 1].forEach(mockCallback);
console.log(mockCallback.mock.calls,"mockCallback.mock.calls")
// Mock函数被调用两次
expect(mockCallback.mock.calls.length).toBe(2);
// 第一次调用Mock函数时,第一个参数为0
expect(mockCallback.mock.calls[0][0]).toBe(0);
// 第二次调用Mock函数时,第一个参数为1
expect(mockCallback.mock.calls[1][0]).toBe(1);
// 第一次调用Mock函数的返回值为42
expect(mockCallback.mock.results[0].value).toBe(42);
// const myMock = jest.fn();
// const a = new myMock();
// const b = {};
// const bound = myMock.bind(b);
// bound();
// console.log(myMock.mock.instances);
// // > [ <a>, <b> ]
// Mock 函数还可以通过工具函数模拟返回值。
const myMock = jest.fn();
console.log(myMock());
// > undefined
myMock
.mockReturnValueOnce(10)
.mockReturnValueOnce("x")
.mockReturnValue(true);
console.log(myMock(), myMock(), myMock(), myMock());
// > 10, "x", true, true
});
常用断言
官方文档测试断言
expect({a:1}).toBe({a:1})//判断两个对象是否相等 expect(1).not.toBe(2)//判断不等
expect(n).toBeNull(); //判断是否为null
expect(n).toBeUndefined(); //判断是否为undefined
expect(n).toBeDefined(); //判断结果与toBeUndefined相反
expect(n).toBeTruthy(); //判断结果为true
expect(n).toBeFalsy(); //判断结果为false
expect(value).toBeGreaterThan(3); //大于3
expect(value).toBeGreaterThanOrEqual(3.5); //大于等于3.5
expect(value).toBeLessThan(5); //小于5
expect(value).toBeLessThanOrEqual(4.5); //小于等于4.5
expect(value).toBeCloseTo(0.3); // 浮点数判断相等
expect("Christoph").toMatch(/stop/); //正则表达式判断
expect(["one","two"]).toContain("one"); //不解释
function compileAndroidCode() {
throw new ConfigError("you are using the wrong JDK");
}
test("compiling android goes as expected", () => {
expect(compileAndroidCode).toThrow();
expect(compileAndroidCode).toThrow(ConfigError); //判断抛出异常
})
运行测试
- 运行测试
npm test
- 使用 --watch 参数可以启动一个监控界面,当文件发生变化时,会便会运行相关的测试。
npm test -- --watch
- 使用 --coverage 参数,测试结束时还会得到一份测试覆盖度报告,如下图。
npm test -- --coverage
----------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------------------|----------|----------|----------|----------|-------------------|
All files | 58.18 | 36.94 | 43.44 | 58.21 | |
examples | 100 | 100 | 100 | 100 | |
jwt.js | 100 | 100 | 100 | 100 | |
tools.js | 100 | 100 | 100 | 100 | |
lib | 61.57 | 41.73 | 48 | 61.49 | |
agentEvents.js | 100 | 100 | 100 | 100 | |
client.js | 72.45 | 44.83 | 71.43 | 72.45 |... 90,191,196,202 |
commands.js | 35.14 | 7.69 | 17.78 | 35.14 |... 46,347,367,376 |
constants.js | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
logger.js | 100 | 100 | 100 | 100 | |
master.js | 56.25 | 42.55 | 56.25 | 55.94 |... 48,249,250,252 |
options.js | 100 | 100 | 100 | 100 | |
utils.js | 93.33 | 50 | 100 | 93.33 | 28 |
websocketJsonRPC.js | 75.22 | 50 | 76.47 | 75.22 |... 86,187,197,207 |
lib/convertors | 29.63 | 3.85 | 5.56 | 30 | |
index.js | 100 | 100 | 100 | 100 | |
utils.js | 8.33 | 0 | 0 | 8.7 |... 33,34,35,37,40 |
v0.js | 26.92 | 0 | 0 | 26.92 |... 47,49,50,53,54 |
v1.js | 60 | 100 | 0 | 60 | 7,8 |
v2.js | 36.36 | 16.67 | 14.29 | 36.36 |... 33,34,35,37,39 |
----------------------|----------|----------|----------|----------|-------------------|
Test Suites: 4 failed, 3 passed, 7 total
Tests: 6 failed, 4 passed, 10 total
Snapshots: 0 total
Time: 11.77s
Ran all test suites.
以上是 01、Jest简介 的全部内容, 来源链接: utcz.com/z/514357.html