IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 震惊! jest竟然这样... -> 正文阅读

[开发测试]震惊! jest竟然这样...

JEST

一、安装

jest用于进行js代码测试的工具

1、安装

安装命令:cnpm install --save-dev jest

2、入门使用

简单使用案例

function sum(a, b) {
  return a + b;
}
module.exports = sum;
// 创建一个需要测试的文件

编写测试用例

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

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

然后在package.json里面添加命令,如:

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

最后,运行 yarn testnpm run test

此时就可以看到控制台打印提升,判断测试结果

或者使用npx jest,直接调用jest命令

3、jest配置

运行命令 npx jest --init,进入命令配置过程

选择需要的配置,然后就会生成jest.config.js文件,也可以在里面修改配置

4、jest覆盖率

如果配置了覆盖率,即coverageDirectory: "导出文件名",

使用命令:npx jest --coverage

  • 输入命令执行后会打印项目的测试覆盖率
  • 同时生成lcov-report文件,里面的index.html文件就是测试报告

5、文件watch

执行命令:npx jest --watchAll,或者添加到packjson里面。


二、开始使用

1、基础语法

1、期望器:

expect:期望器

expect(2 + 2),我们期望运行2 + 2这个逻辑

2、匹配器:

  • toBe===

    如:toBe(4),我们用来匹配期望器运行的值是否匹配

案例:

test('two plus two is four', () => {
  expect(2 + 2).toBe(4);
  // 测试2+2 ?= 4  
});
  • not.toBe:取反匹配器,就是取非的意思

  • toEqual:对象值匹配器

    对象的值需要专门的匹配器:如

    test('object assignment', () => {
      const data = {one: 1};
      data['two'] = 2;
      expect(data).toEqual({one: 1, two: 2});
    });
    
  • toBeNull 只匹配 null

  • toBeUndefined 只匹配 undefined

  • toBeDefinedtoBeUndefined 相反

  • toBeTruthy 匹配任何 if 语句为真

  • toBeFalsy 匹配任何 if 语句为假

  • toBeCloseTo 匹配浮点数的相等,如(0.1 + 0.2)与0.3进行比较使用这个匹配器。

  • toBeGreaterThen:大于逻辑—>

  • toBeGreaterThenOrEqual:大于等于—>=

  • toBeLessThen:小于逻辑 — <

  • toBeLessThenOrEqual:小于等于—<=

  • toMatch:匹配字符串中是否含有

    使用案例

    test('toMatch匹配器', () => {
        const src = '旭大王,旭宝宝';
        expect(src).toMatch('旭大王');
    })
    
  • toContain:数组匹配器,和上面的字符串匹配器同理

  • toThrow:异常匹配器,如new Error创造的异常

2、jest支持es6

jest是不支持es6语法的,所以需要使用babel处理

需要插件:@babel/core@babel/preset-env

然后在项目根目录下创建babel的配置文件:.babelrc

{
	"presets": [
		[
			"@babel/preset-env", {
				"target": {
					"node": "current"
				}
			}
		]
	]
}

或着配置为

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

3、异步代码测试

1、promise一型

异步代码

import axios from 'axios';

export const fetchData = (callback) => {
    axios.get('地址').then((res) => {
        callback(res);
    });
};

测试用例test

import { fetchData } from './fetchData.js';

test('异步测试1', (done) => {
    fetchData((data) => {
        expect(data).toEqual({
            success: true
        });
        // 这里有坑,不加done,无法监视返回后的结果
        // 想要测试返回接口,等待异步操作完成,必须加done()
        done();
    });
});

2、promise二型

异步代码

import axios from 'axios';

export const fetchData = (url) => {
    return axios.get(url);
};

测试用例test

import { fetchData } from './fetchData.js';

test('异步测试2', () => {
    // return 和上面的 done 作用是一样的。
    return fetchData('地址').then((response) => {
        expect(response?.data).toEqual({
            success: true
        });
    });
});

3、测试返回404

import { fetchData } from './fetchData.js';

test('异步测试2', () => {
    // 测试断言,无论出不出现错误,都要执行测试用例(1)次
    expect.assertions(1);
    return fetchData('地址').catch((error) => {
        // 通过捕获错误检测是否含有404检测错误。
        expect(error.toString().indexOf(404) > -1).toBe(true);
    });
});

4、async类型

import { fetchData } from './fetchData.js';

test('异步测试2', async() => {
	const responese = await fetchData('地址');
    expect(response?.data).toEqual({
        success: true
    });
});

4、jest的hook

  1. 所有测试执行前:beforAll,

    beforeAll(() => {
        console.log('所有测试用例执行前钩子');
    })
    
  2. 所有测试用例执行后:afterAll

  3. 单个测试用例执行前:beforeEach

  4. 单个测试用例执行后:afterEach

    beforEach(() => {
        console.log('测试用例执行前');
    })
    test('测试用例构造', () => {
        expect(0.2 + 0.1).toBeCloseTo(0.3);
    })
    afterEach(() => {
        console.log('测试用例执行后');
    })
    

5、测试分组

通一文件对多个测试进行分组

分组:describe

describe('分组1', () => {
    test('测试1组a', () => {  });
    test('测试1组b', () => {  });
});

describe('分组2', () => {
    test('测试2组a', () => {  });
    test('测试2组b', () => {  });
})

6、hook的作用域

上面介绍了分组,每个组都可以有自己的前置后置钩子。

规则:

  1. 父级的钩子可以继承给子级,在子级内部执行
  2. 子级内部自己的钩子也执行,与外部继承的互不干扰
  3. 先执行外部继承的钩子,在执行内部的钩子。

7、识别webpack别名

正常来说,jest是无法识别webpack配置的路径别名

// 在jest.config.js里面进行配置
module.exports = {
	moduleNameMapper: {
		'@/(.*)$': '<rootDir>/src/$1.js',
	}
}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:07:20  更:2021-07-28 08:07:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:24:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码