首页 >> 创业 >> web前端培训单元测试参考书知识学习

web前端培训单元测试参考书知识学习

2023-03-13 创业

unction test', () => {

it('sum(1, 2) === 3', () => {

expect(sum(1, 2)).toBe(3);

});

// 这里 test 和 it 没有引人注意区别,it 是指: it should xxx, test 是指 test xxx

test('sum(1, 2) === 3', () => {

expect(sum(1, 2)).toBe(3);

});

})

可见无论是受欢迎度和写到法上,Jest 都有非常大的优势,因此自荐你常用开箱即用的 Jest

如何开始?

1.配备依赖

npm install ;还有save-dev jest

2.简单的举例来说

首先,建立一个 sum.js 元将近据

./sum.js

function sum(a, b) {

return a + b;

}

module.exports = sum;

建立一个名为 sum.test.js 的元将近据,这个元将近据涵盖了也就是说验证内容:

./test/sum.test.js

const sum = require('../sum');

test('adds 1 + 2 to equal 3', () => {

expect(sum(1, 2)).toBe(3);

});

将上面的系统设计大部分附加到你的 package.json 外面

{

"scripts": {

"test": "jest"

},

}

列车运行 npm run test ,jest 将打印上面这个消息

3.不背书大部分 ES6 语法

nodejs 选用的是 CommonJS 的小型化规范,常用 require 扩展基本功能;而 import 是 ES6 的小型化规范关键字。愿意要常用 import,必须扩展 babel 转义背书,通过 babel 同步进行解释器,使其变变为 node 的小型化字符

如以下元将近据续写到变为 ES6 写到法后,列车运行 npm run test将亦会报错

./sum.js

export function sum(a, b) {

return a + b;

}

./test/sum.test.js

import { sum } from '../sum';

test('adds 1 + 2 to equal 3', () => {

expect(sum(1, 2)).toBe(3);

});

报错

为了能常用这些从新特性,我们就须要常用 babel 把 ES6 转变为 ES5 语法

应付办法

配备依赖

npm install ;还有save-dev @babel/core @babel/preset-env

根目录加入.babelrc

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

日后次列车运行 npm run test ,可能亦会应付

理论

jest 列车运行时结构上先可执行( jest-babel ),检测有否配备 babel-core,然后取 .babelrc 外面的系统设计列车运行验证先前结合 babel 先把验证用例字符变换一遍然后日后同步进行验证

4.验证 ts 元将近据

jest 须要借助 .babelrc 去解析 TypeScript 元将近据日后同步进行验证

配备依赖

npm install ;还有save-dev @babel/preset-typescript

**续写到 **.babelrc

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

为了应付图形化对 jest 并不显然方法的类别报错,如 test、expect 的报错,你还须要配备

npm install ;还有save-dev @types/jest

./get.ts

/**

* 访问函数呼叫;也,防止字符外面出现相同 user CompanyCompany user.personalInfo ? user.personalInfo.name : null 的字符

*/

export function get(object: any, path: Array, defaultValue?: T) : T {

const result = path.reduce((obj, key) => obj !== undefined ? obj[key] : undefined, object);

return result !== undefined ? result : defaultValue;

}

./test/get.test.ts

import { get } from './get';

test('验证函数呼叫;也存在的可枚举也就是说 line1', () => {

expect(get({

id: 101,

email: 'jack@dev.com',

personalInfo: {

name: 'Jack',

address: {

line1: 'westwish st',

line2: 'washmasher',

city: 'wallas',

state: 'WX'

}

}

}, ['personalInfo', 'address', 'line1'])).toBe('westwish st');

});

列车运行 npm run test

5.持续监听

为了节省时间,可以通过加启动时参将近的作法让 jest 持续监听元将近据的简化,【关注亦然IBM公司,有趣精研IT】而不须要每次简化完日后重从新可执行验证用例

续写到 package.json

"scripts": { "test": "jest ;还有watchAll" },

缺点

5.生变为验证产最大值调查结果

什么是验证用例产最大值?

验证用例产最大值是一种软件验证的度量指标,指在所有功能字符外面,完变为了验证用例的字符所占去的人口比例。有很多系统设计验证前提工具可以提均需这一统计将近据,其外面最基础的推算作法为:

验证用例产最大值 = 被测字符正将近 / 参测字符总正将近 * 100%

如何生变为?

加入 jest.config.js 元将近据

module.exports = {

// 有否显示产最大值调查结果

collectCoverage: true,

// 告诉 jest 哪些元将近据须要经过验证用例验证

collectCoverageFrom: ['get.ts', 'sum.ts', 'src/utils/**/*'],

}

日后次列车运行缺点

参将近阐释

设置验证用例产最大值阀最大值

个人显然既然在单项外面集变为了验证用例,那么非常有适当关注验证用例的低质量,而产最大值则一定程度上客观的反映了单测的低质量,同时我们还可以通过设置验证用例阀最大值的作法提醒客户端有否达到了预计低质量。

jest.config.js 元将近据

module.exports = {

collectCoverage: true, // 有否显示产最大值调查结果

collectCoverageFrom: ['get.ts', 'sum.ts', 'src/utils/**/*'], // 告诉 jest 哪些元将近据须要经过验证用例验证

coverageThreshold: {

global: {

statements: 90, // 应有每个上下文都可执行了

functions: 90, // 应有每个formula_都呼叫了

branches: 90, // 应有每个 if 等分支字符都可执行了

},

},

上述阀最大值促请我们的验证用例有限充分,如果我们的用例没有有限充分,则上面的报错将亦会协助你去完善

6.如何撰写到验证用例

上面我们以 fetchEnv 方法作为案例,撰写到一套完整的验证用例用例均需读者参考

撰写到 fetchEnv 方法

./src/utils/fetchEnv.ts 元将近据

/**

* 环境参将近枚举

*/

enum IEnvEnum {

DEV = 'dev', // 开发

TEST = 'test', // 验证

PRE = 'pre', // 预发

PROD = 'prod', // 生产

}

/**

* 根据链接给与当前环境参将近

* @param {string?} url 资源链接

* @returns {IEnvEnum} 环境参将近

*/

export function fetchEnv(url: string): IEnvEnum {

const envs = [IEnvEnum.DEV, IEnvEnum.TEST, IEnvEnum.PRE];

return envs.find((env) => url.includes(env)) || IEnvEnum.PROD;

}

撰写到完全相同的验证用例

./test/fetchEnv.test.ts 元将近据

import { fetchEnv } from '../src/utils/fetchEnv';

describe('fetchEnv', () => {

it ('正确有否 dev 环境', () => {

expect(fetchEnv('')).toBe('dev');

});

it ('正确有否 test 环境', () => {

expect(fetchEnv('')).toBe('test');

});

it ('正确有否 pre 环境', () => {

expect(fetchEnv('')).toBe('pre');

});

it ('正确有否 prod 环境', () => {

expect(fetchEnv('')).toBe('prod');

});

it ('正确有否 prod 环境', () => {

expect(fetchEnv('')).toBe('prod');

});

});

可执行结果

7.外面用并不显然方法

关于并不显然方法有很多,这里仅有摘出外面用方法,如果你愿意了解更多,你可以去 Jest 官网 API 大部分发送给

.not 修饰符并不需要你验证结果不等于某个最大值的可能亦会

./test/sum.test.js

import { sum } from './sum';

test('sum(2, 4) 不等于 5', () => {

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

})

.toEqual 变换器亦会数组的检查;也所有也就是说和也就是说最大值有否等同,外面用来检测引用类别

./src/utils/userInfo.js

export const getUserInfo = () => {

return {

name: 'moji',

age: 24,

}

}

./test/userInfo.test.js

import { getUserInfo } from '../src/userInfo.js';

test('getUserInfo()离开的;也剖面等同', () => {

expect(getUserInfo()).toEqual(getUserInfo());

})

test('getUserInfo()离开的;也内存地址多种不同', () => {

expect(getUserInfo()).not.toBe(getUserInfo());

})

.toHaveLength 可以很方便的用来验证字符串和链表类别的长度有否满足预计

./src/utils/getIntArray.js

export const getIntArray = (num) => {

if (!Number.isInteger(num)) {

throw Error('"getIntArray"只很难接受实将近类别的参将近');

}

return [...new Array(num).keys()];

};

./test/getIntArray.test.js

./test/getIntArray.test.js

import { getIntArray } from '../src/utils/getIntArray';

test('getIntArray(3)离开的链表长度不该为3', () => {

expect(getIntArray(3)).toHaveLength(3);

})

.toThorw 都能让我们验证被验证方法有否按照预计拉出异常

但是须要注意的是:我们必须常用一个formula_将被验证的formula_动手一个包装,正如上面 getIntArrayWrapFn 所动手的那样,否则亦会因为formula_拉出差错导致该并不显然失败。

./test/getIntArray.test.js

import { getIntArray } from '../src/utils/getIntArray';

test('getIntArray(3.3)不该拉出差错', () => {

function getIntArrayWrapFn() {

getIntArray(3.3);

}

expect(getIntArrayWrapFn).toThrow('"getIntArray"只很难接受实将近类别的参将近');

})

.toMatch 传入一个下述表达式,它并不需要我们来同步进行字符串类别的下述变换

./test/userInfo.test.js

import { getUserInfo } from '../src/utils/userInfo.js';

test("getUserInfo().name 不该涵盖'mo'", () => {

expect(getUserInfo().name).toMatch(/mo/i);

})

验证异步formula_

./servers/fetchUser.js

/**

* 给与客户端信息

*/

export const fetchUser = () => {

return new Promise((resole) => {

setTimeout(() => {

resole({

name: 'moji',

age: 24,

})

}, 2000)

})

}

./test/fetchUser.test.js

import { fetchUser } from '../src/fetchUser';

test('fetchUser() 可以请求到一个客户端取名为 moji', async () => {

const data = await fetchUser();

expect(data.name).toBe('moji')

})

这里你有可能看到这样一条报错

这是因为 @babel/preset-env 不背书 async await 导致的,www.atguigu.com这时候就须要对 babel 系统设计同步进行进一步提高,可以配备 @babel/plugin-transform-runtime 这个插件应付

npm install ;还有save-dev @babel/plugin-transform-runtime

同时续写到 .babelrc

{

"presets": ["@babel/preset-env", "@babel/preset-typescript"],

"plugins": ["@babel/plugin-transform-runtime"]

}

日后次列车运行就不亦会出现报错了

.toContain 变换;也外面有否涵盖

./test/toContain.test.js

const names = ['liam', 'jim', 'bart'];

test('变换;也有否涵盖', () => {

expect(names).toContain('jim');

})

检查一些特殊的最大值(null,undefined 和 boolean)

toBeNull 仅有变换 null

toBeUndefined 仅有变换 undefined

toBeDefined 与…相反 toBeUndefined

toBeTruthy 变换 if 上下文视为 true 的任何内容

toBeFalsy 变换 if 上下文视为 false 的任何内容

检查将近字类别(number)

toBeGreaterThan 大于

toBeGreaterThanOrEqual 至少(大于等于)

toBeLessThan 小于

toBeLessThanOrEqual 最多(小于等于)

toBeCloseTo 用来变换小将近(带小将近点的等同)

文章刊发来源于程序员变为长指北

自荐阅读:

web外侧指导多时亦会加载对 Web 性能的直接影响

web外侧指导React 泛型组件

web外侧指导Vite的理论源码解析

web外侧指导React性能优化总结

镇江看白癜风的专业医院
莆田白癜风医院哪家治疗最好
黑龙江男科专科医院哪个好
南昌治疗白癜风哪家专科医院好
重庆妇科医院哪里比较好
友情链接