# easy-test-lib
**Repository Path**: tackchen/easy-test-lib
## Basic Information
- **Project Name**: easy-test-lib
- **Description**: A simple and easy-to-use testing framework
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-26
- **Last Updated**: 2022-01-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 🚀 一个简单小巧的js测试库
**[English](https://github.com/theajack/easy-test-lib/blob/master/README.md) | [在线使用](https://theajack.gitee.io/jsbox?github=theajack.easy-test-lib) | [反馈错误/缺漏](https://github.com/theajack/easy-test-lib/issues/new) | [Gitee](https://gitee.com/theajack/easy-test-lib)**
### 1. 特性
1. typescript 编写
2. 体积小巧,简单易用
3. 多端支持
4. 支持异步
5. 可自定义插件
6. 配置文件 + 命令行运行
7. 全局安装可用
### 2. 安装
#### 2.1 api调用
```
npm i easy-test-lib -D
```
```js
const {startTest} = require('easy-test-lib');
startTest(config);
```
#### 2.2 配置文件调用
package.json 增加
```
...
"scripts": {
"test": "etest "
},
...
```
配置文件默认是根目录的 `easy.test.js` 文件,可以自由配置
根目录执行
```
npm run test
```
#### 2.3 全局安装使用
```
npm i easy-test-lib -g
```
配置文件与2.2中规则一致
在项目目录中运行以下命令行即可
```
etest
```
#### 2.4 CDN
```html
```
### 3 配置
```js
const {startTest} = require('easy-test-lib');
function add (x, y) {
return x + y;
}
startTest({
args: { // 可选参数
// 用于传入一些公用的api,会被传入测试用例中
},
cases: [ // 测试用例配置,建议拆分文件
{
name: '测试add函数', // 可选
disabled: false, // 可选 是否禁用当前用例
args: { // 可选
// 当前测试用例的api
},
test (mergedArgs) {
// mergedArg 为公共arg和用例arg的合并,除此之外mergedArg 中有 $global 和$local两个属性
// this指代当前测试用例
return add(1, 1);
},
expect: 2,
// plugin: ITestPlugin, // 当前测试用例使用的插件 可选
}
],
onTestComplete (result) { // 测试全部完成回调 可选
// result 数据结构如下
/*
passed: boolean;
results: [
{
passed: boolean;
result: any;
expect?: any;
name?: string;
index: number;
time: number;
}
];
time: number;
*/
},
onTestSingle (result) { // 单个测试用例完成回调 可选
// result 数据结构如下
/*
passed: boolean;
result: any;
expect?: any;
name?: string;
index: number;
time: number;
*/
},
// plugin: ITestPlugin, // 全局插件 可选
});
```
### 4 插件
#### 4.1 内置插件
easy-test-lib 内置了 默认插件(defaultPlugin) 1.0.1 及之后的版本 将异步插件功能合并进了默认插件里
以下是一个使用异步的测试用例
```js
function timeout (time) {
return new Promise(resolve => {
setTimeout(() => {
resolve(true);
}, time);
});
}
const asyncCase = {
args: {aa: 22},
name: '测试async',
async test (args: any) { // 或者返回一个 Promise 对象
await timeout(2000);
console.log(args, this.args);
return [
11
];
},
expect: [
11
]
};
module.exports = asyncCase;
```
运行测试用例
```js
const {startTest} = require('easy-test-lib');
const testAsync = require('./test-async');
startTest({
cases: [
testAsync
],
onTestComplete (result) {
console.log(`总耗时(${result.time})ms; 结果:${result.passed ? '通过' : '失败'}`);
console.log(result);
},
onTestSingle (result) {
console.log(`${result.index}: 耗时(${result.time})ms; 结果:${result.passed ? '通过' : '失败'}`);
}
});
```
#### 4.2 自定义插件
easy-test-lib 支持自定义插件,交给开发者定制测试计算过程,一个简单的自定义插件模板如下
```js
const plugin: ITestPlugin = (item, mergedArgs) => {
// do something ...
return {
result: {},
expect: {},
passed: true,
};
};
export default plugin;
```
### 5 API
#### 5.1 startTest
参见 上文 3
#### 5.2 isValueEqual
判断两个对象是否相等,支持引用类型
引用类型会遍历其中的所有属性值是否相等
```js
const {isValueEqual} = require('easy-test-lib');
console.log(isValueEqual(1, 1));
```
#### 5.3 defaultPlugin
默认的插件
#### 5.4 ts 接口
1. ITestConfigItem
2. ITestPlugin
3. IStartTest
4. IIsValueEqual
5. IMergedArgs