Remove test case
This commit is contained in:
parent
22af68428f
commit
49ed8e588a
@ -1,205 +0,0 @@
|
||||
// import { Logger } from "../logger/Logger";
|
||||
import { LogStyle, LogLabel } from "./Logger";
|
||||
|
||||
/**
|
||||
* 测试结果
|
||||
*/
|
||||
class TestResult {
|
||||
|
||||
/**
|
||||
* 用例名称
|
||||
*/
|
||||
public caseName:string;
|
||||
|
||||
/**
|
||||
* 测试结果
|
||||
*/
|
||||
public result:boolean;
|
||||
|
||||
/**
|
||||
* 消息
|
||||
*/
|
||||
public message:string;
|
||||
|
||||
/**
|
||||
* 附加消息
|
||||
*/
|
||||
public attach:string;
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
* @param caseName 用例名称
|
||||
*/
|
||||
constructor(caseName:string) {
|
||||
this.caseName = caseName;
|
||||
this.result = false;
|
||||
this.message = "";
|
||||
this.attach = "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置结果
|
||||
*/
|
||||
public setResult(result:boolean, message?:string, attach?:string) {
|
||||
this.result = result;
|
||||
this.message = message ?? (result ? "success!" : "failed!");
|
||||
this.attach = attach ?? this.attach;
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试函数结构
|
||||
*/
|
||||
type TestFunction = () => TestResult | Promise<TestResult>;
|
||||
|
||||
/**
|
||||
* 收集测试函数结构
|
||||
*/
|
||||
class CaseCollect {
|
||||
|
||||
/**
|
||||
* 用例键名
|
||||
*/
|
||||
public key:string;
|
||||
|
||||
/**
|
||||
* 用例测试函数
|
||||
*/
|
||||
public caseFunction:TestFunction;
|
||||
|
||||
/**
|
||||
* 测试结果
|
||||
*/
|
||||
result: Promise<TestResult> | undefined;
|
||||
|
||||
/**
|
||||
* @param key 测试用例键名
|
||||
* @param caseFunction 测试函数
|
||||
*/
|
||||
public constructor(key:string, caseFunction:TestFunction) {
|
||||
this.key = key;
|
||||
this.caseFunction = caseFunction;
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行测试用例
|
||||
*/
|
||||
public async runTestCase():Promise<CaseCollect> {
|
||||
|
||||
let result = this.caseFunction();
|
||||
|
||||
if(result instanceof Promise) {
|
||||
this.result = result;
|
||||
} else {
|
||||
this.result = Promise.resolve(result);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public static readonly baseStyle = new LogStyle().setBlank();
|
||||
|
||||
public static readonly successLabel:LogLabel = new LogLabel("√",
|
||||
new LogStyle().setBlank("0 4px").setBorder("1000px", "1px solid green")
|
||||
);
|
||||
|
||||
/**
|
||||
* 打印结果
|
||||
* @param current 当前进度
|
||||
* @param total 总进度
|
||||
*/
|
||||
public printResult(current?:number, total?:number) {
|
||||
|
||||
// 如果测试没有运行,先运行它
|
||||
if(this.result === void 0) this.runTestCase();
|
||||
|
||||
this.result?.then((res) => {
|
||||
|
||||
if(res.result) {
|
||||
console.log(
|
||||
`%c√%c %c1/1%c %c${ this.key }%c ` + res.message,
|
||||
"padding:0 4px; border-radius:1000px; border:1px solid green; color:green",
|
||||
"", "padding:0 4px; border-radius:4px; border:1px solid green; color:green",
|
||||
"", "padding:0 4px; border-radius:4px; border:1px solid #979797; color:#979797",
|
||||
""
|
||||
)
|
||||
} else {
|
||||
console.log(
|
||||
`%c√%c %c1/1%c %c${ this.key }%c ` + res.message,
|
||||
"padding:0 4px; border-radius:1000px; border:1px solid red; color:red",
|
||||
"", "padding:0 4px; border-radius:4px; border:1px solid red; color:red",
|
||||
"", "padding:0 4px; border-radius:4px; border:1px solid #979797; color:#979797",
|
||||
""
|
||||
)
|
||||
}
|
||||
console.log(res)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 收集测试用例
|
||||
* @param testCaseClass 测试用例表
|
||||
*/
|
||||
public static collectCase(testCaseClass:ITestCase):CaseCollect[] {
|
||||
|
||||
// 获取静态方法 key
|
||||
let key = Object.getOwnPropertyNames(testCaseClass);
|
||||
|
||||
// 过滤掉通用的方法和属性
|
||||
key = key.filter((key) => !/(length|name|prototype)/.test(key) );
|
||||
|
||||
// 生成 CaseCollect
|
||||
let caseCollect = [];
|
||||
|
||||
for (let i = 0; i < key.length; i++) {
|
||||
caseCollect.push(new CaseCollect(key[i], testCaseClass[key[i]]))
|
||||
}
|
||||
|
||||
return caseCollect;
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行测试样例
|
||||
*/
|
||||
public static async runCollectCase(cases:CaseCollect[]):Promise<CaseCollect[]> {
|
||||
|
||||
let running:Promise<CaseCollect>[] = [];
|
||||
|
||||
for(let i = 0; i < cases.length; i++) {
|
||||
running.push(cases[i].runTestCase());
|
||||
}
|
||||
|
||||
return Promise.all(running);
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动单元测试
|
||||
*/
|
||||
public static runUnitTest(testCaseClass:ITestCase) {
|
||||
|
||||
let caseCollect = this.collectCase(testCaseClass);
|
||||
|
||||
CaseCollect.runCollectCase(caseCollect).then((caseCollect:CaseCollect[]) => {
|
||||
|
||||
for(let i = 0; i < caseCollect.length; i++) {
|
||||
caseCollect[i].printResult()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试用例接口
|
||||
*/
|
||||
interface ITestCase {
|
||||
|
||||
/**
|
||||
* 测试用例函数
|
||||
*/
|
||||
[key:string]:TestFunction;
|
||||
}
|
||||
|
||||
export default ITestCase;
|
||||
export { ITestCase, TestResult, TestFunction, CaseCollect };
|
Loading…
Reference in New Issue
Block a user