使用
-
安装 jest
npm i -D jest ts-jest @types/jest
- 创建 jest 配置文件
jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
rootDir: 'src'
};
- 修改 typescript 配置文件
tsconfig.json
"compilerOptions": {
...
"esModuleInterop": true
},
- 修改
package.json
{
...
"scripts": {
"test": "jest"
}
...
}
- 编写测试文件
Jest 会自动找到项目中所有使用 .spec.js
或 .test.js
文件命名的测试文件并执行,通常我们在编写测试文件时遵循的命名规范:测试文件的文件名 = 被测试模块名 + .test.js,例如被测试模块为sum.js,那么对应的测试文件命名为 sum.test.js。
sum.ts
export const sum = (a: number, b: number): number => {
return a + b;
};
sum.test.ts
import { sum } from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
- 运行 jest
npm run test
作用域
describe 与 test
先执行当前文件里的所有 describe 的 handler,然后再执行 test
不要在 describe 的 handler 中准备或释放 test 的执行环境
在 beforeEach afterEach beforeAll afterAll 里面准备或释放 test 的执行环境
这些钩子函数的作用域包括顶层的和 describe 块作用域的
test 按顺序执行,后面的 test 等待前一个 test 执行结束之后才执行
test 的执行顺序就是字面上的前后顺序
如果只有一个测试,使用 test.only,否则会报错
异步
done
return promise
async / await
Mock
.mock
所有的 mock 函数都有 .mock 属性,保存着 mock 函数的调用信息,this 指向以及返回值等信息
假设 myMock 是 mock 函数,myMock.mock.instances 是个数组,保存着每次调用 myMock 函数时候的 this 值
- myMock.mock.calls:数组,调用信息
- myMock.mock. results:数组,返回值信息
- myMock.mock.instances:数组,this 指向,保存着每次调用 myMock 函数时候的 this 值
myMock.mock.calls.length 调用次数
myMock.mock.calls[0] 第一次调用的信息
myMock.mock.calls[0][0] 第一次调用的第一个参数
myMock.mock.calls[0][1] 第一次调用的第二个参数
myMock.mock.results[0].value 第一次调用的返回值
myMock.mock.instances.length 实例化的次数
myMock.mock.instances[0] 第一次实例化时候 this 指向的对象
myMock.mock.instances[0].name 第一次实例化时候 this 指向的对象的 name 属性
网友评论