Skip to content

Latest commit

 

History

History
326 lines (278 loc) · 7.79 KB

README-CN.md

File metadata and controls

326 lines (278 loc) · 7.79 KB

tsunit

一个仿照c#接口写的typescript单元测试框架

https://github.com/xxxxst/tsunit

English 简体中文

特性

  • 简洁的接口
  • 运行于chrome
  • 方便定位错误位置
  • 支持异步测试用例

安装

npm install @xxxxst/tsunit

配置

  • 启用 decortor
  • 启用 source map

查看更多配置

https://github.com/xxxxst/example-tsunit

使用

测试文件 - ComTest.ts

@TestClass()
export default class ComTest {
    @Test()
    matchTest() {
        Assert.equal(1, 1);
        Assert.notEqual("aa", "bb");
    }

    @Ignore()
    @Test()
    ignoreTest() {
        Assert.equal(1, 2, "info");
    }

    @Test(1, 2)
    @Test("a", "b")
    noMatchTest(except, actual) {
        Assert.equal(except, actual, "info");
    }

    @AsyncTest()
    async asyncTest() {
        var rst = await this.getHttp();
        Assert.equal("data", rst);
    }

    async getHttp() {
        return new Promise(resolve => setTimeout(()=>{
            resolve("data");
        }, 0));
    }
}

测试文件 - ComTest2.ts

@TestClass({autoRun:false})
export default class ComTest2 {
    constructor(arg1, arg2) {

    }
}

程序入口文件

// 不需要创建测试类,导入即可自动执行
import './ComTest';

// 第二种引用方式
// 确保类被引用过
import ComTest from './ComTest';
ComTest

// 自定义执行测试程序
import ComTest2 from './ComTest2';
// ... 你的初始化代码
setTimeout(()=>{
    // 运行测试
    Assert.run(ComTest2, "arg1", "arg2");
}, 0);

打开控制台查看测试信息

接口

装饰器

@TestClass(option?:{autoRun?:boolean}, ...args)

  • 类装饰器
  • 标记测试类
  • autoRun 自动执行测试, 默认为true
  • args 测试类构造函数参数

@Test(...args)

  • 方法装饰器
  • 标记测试方法
  • args 方法参数

@AsyncTest(...args)

  • 方法装饰器
  • 标记异步测试方法
  • 需要使用async/await
  • args 方法参数

@Ignore()

  • 方法装饰器
  • 忽略(异步)测试方法

Assert

Assert.run(class, ...args)

  • 自定义运行测试类
  • 需要在 @TestClass()使用autoRun:false
  • class 测试类
  • args 测试类构造函数参数

Assert.setLang(obj)

  • 设置语言,默认为英语
  • obj 语言数据, 详细数据请查看源代码
    • 内置语言:
    • Assert.lang_en_us 英语
    • Assert.lang_zh_cn 简体中文

Assert.equal(expected:any, actual:any, desc: string = "")

  • 测试是否相等,如果是object类型则遍历进行比较
  • expected 期望值
  • actual 实际值
  • desc 描述信息

其他assert

- -
Assert.equal (expected:any, actual:any, desc: string = "")
Assert.notEqual (expected:any, actual:any, desc: string = "")
Assert.strongEqual (expected:any, actual:any, desc: string = "")
Assert.strongNotEqual (expected:any, actual:any, desc: string = "")
Assert.same (expected:any, actual:any, desc: string = "")
Assert.notSame (expected:any, actual:any, desc: string = "")
Assert.isTrue (actual:any, desc: string = "")
Assert.isFalse (actual:any, desc: string = "")
Assert.isEmpty (actual:any, desc: string = "")
Assert.isNotEmpty (actual:any, desc: string = "")
Assert.isNull (actual:any, desc: string = "")
Assert.isNotNull (actual:any, desc: string = "")
Assert.isUndefined (actual:any, desc: string = "")
Assert.isNotUndefined (actual:any, desc: string = "")
Assert.isBool (actual:any, desc: string = "")
Assert.isArray (actual:any, desc: string = "")
Assert.isObject (actual:any, desc: string = "")
Assert.isString (actual:any, desc: string = "")
Assert.isNumber (actual:any, desc: string = "")
Assert.success (desc: string = "")
Assert.fail (desc: string = "")

assert使用

方法 近似表达式 用法
equal a==b(遍历对象) Assert.equal(1,1)
Assert.equal(true,true)
Assert.equal(1,'1')
Assert.equal({},{})
Assert.equal([1],[1])
=> 成功
=> 成功
=> 成功
=> 成功
=> 成功
notEqual a!=b(遍历对象)
strongEqual typeof(a)==typeof(b) && equal(a,b) Assert.strongEqual(1,'1') => 失败
strongNotEqual !strongEqual(a,b)
same a===b Assert.same(1,'1')
Assert.same({},{})
a=b={},Assert.same(a,b)
=> 失败
=> 失败
=> 成功
notSame a!==b
isTrue !!a Assert.isTrue(0)
Assert.isTrue(false)
Assert.isTrue("")
Assert.isTrue(null)
Assert.isTrue(undefined)
=> 失败
=> 失败
=> 失败
=> 失败
=> 失败
isFalse !a
isEmpty !a Assert.isEmpty("") => 成功
isNotEmpty !!a
isNull a===null Assert.isNull(null)
Assert.isNull(undefined)
=> 成功
=> 失败
isNotNull a!==null
isUndefined a===undefined Assert.isUndefined(undefined)
Assert.isUndefined(null)
=> 成功
=> 失败
isNotUndefined a!==undefined
isBool typeof(a)=="boolean" Assert.isBool(undefined)
Assert.isBool(null)
Assert.isBool(0)
Assert.isBool("")
=> 失败
=> 失败
=> 失败
=> 失败
isArray Array.isArray(a) Assert.isArray([])
Assert.isArray({})
=> 成功
=> 失败
isObject a!=null && typeof(a)=="object" &&
!Array.isArray(a)
Assert.isObject({})
Assert.isObject([])
=> 成功
=> 失败
isString typeof(a)=="string" Assert.isString("") => 成功
isNumber typeof(a)=="number" Assert.isString(1) => 成功
success true Assert.success() => 成功
fail false Assert.fail() => 失败

示例

基于webpack + typescript + vue(ui测试)

https://github.com/xxxxst/example-tsunit