YOLO813

Typescript和jest单元测试初了解

    以前了解过一些简单的JavaScript语法,最近因为需要使用typescript语法进行单元测试,所以又去买了些课程学习了下。

    关于定义:TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准,可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

    关于node的环境安装网络上已经有很多教程,不再赘述,建议安装NVM(node.js version management),用于满足不同版本的需要。

    JavaScript是一种弱类型语音,而且没有类的概念,但在TS中,就不一样了,例如,ts文件中定义一个空列表:

let pointArray:Array<any>=["hello"]
let boxArray:Array<any>=["world"];

    我们使用tsc编译之后的js文件如下(已经安装typescript的前提下):

var pointArray = ["hello"];
var boxArray = ["world"];

    例如,ts中定义类如下,我定义了一个ProcessClass类,用于提取一个json文件中的数据,其中file_name和type_name为初始化类的时必须携带的参数,results参数为定义通过单元测试的返回值,构造函数constructor为必须,且需绑定初始化类时定义的参数,定义了一个函数mySortFunc用于处理数组中的第一个点到原点(0,0)的距离,其中默认为一维数组,距离按照从近到远排序,其中sort(function(a,b){}是用于自定义数组排序的方式

class ProcessClass{
    file_name:string
    type_name:string
    results:Array<any> = []
    constructor(file_name:string,type_name:string){
        this.file_name = file_name
        this.type_name = type_name
    }
    mySortFunc(my_array:any[], dimensional=1,oredrs="asc", number_of_powers=2){
        return my_array.sort(function(a,b){
            if(dimensional==2){
                a = a[0]
                b= b[0]
            }
            if(oredrs=="asc"){
                return Math.sqrt(a.x**number_of_powers + a.y**number_of_powers) - Math.sqrt(b.x**number_of_powers + b.y**number_of_powers)
            }else{
                return Math.sqrt(b.x**number_of_powers + b.y**number_of_powers) - Math.sqrt(a.x**number_of_powers + a.y**number_of_powers)
            }
        })
    }
}

    而在js文件中,对应生成的代码如下,使用prototype(javascript中的每个对象都有prototype属性)返回对象类型原型的引用,在制作web页面写js语言时,经常会使用到这个属性,可以很方便的绑定属性或者函数

var ProcessClass = /** @class */ (function () {
    function ProcessClass(file_name, type_name) {
        this.results = [];
        this.file_name = file_name;
        this.type_name = type_name;
    }
    ProcessClass.prototype.mySortFunc = function (my_array, dimensional, oredrs, number_of_powers) {
        if (dimensional === void 0) { dimensional = 1; }
        if (oredrs === void 0) { oredrs = "asc"; }
        if (number_of_powers === void 0) { number_of_powers = 2; }
        return my_array.sort(function (a, b) {
            if (dimensional == 2) {
                a = a[0];
                b = b[0];
            }
            if (oredrs == "asc") {
                return Math.sqrt(Math.pow(a.x, number_of_powers) + Math.pow(a.y, number_of_powers)) - Math.sqrt(Math.pow(b.x, number_of_powers) + Math.pow(b.y, number_of_powers));
            }
            else {
                return Math.sqrt(Math.pow(b.x, number_of_powers) + Math.pow(b.y, number_of_powers)) - Math.sqrt(Math.pow(a.x, number_of_powers) + Math.pow(a.y, number_of_powers));
            }
        });
    };
    return ProcessClass;
}());

    我们也可以不使用tsc编译的方法,直接运行ts代码,例如在vs code当中,安装一个Code Runner的插件,就可以点击右上角的运行按钮直接运行了


    关于单元测试,我使用的是jest,不过虽然测试已经通过了,但是我还没搞清楚具体的语法怎么写

# extractData.spec.ts  示例
describe("extractData", function() {
  it("should get all points by extractPoints", async () => {
    expect(extractPoints("./src/fp-ramda/testData.json")).toEqual([
      { x: 1142.325581395349, y: 277.3255813953488 },
      { x: 1072.2093023255813, y: 401.86046511627904 },
      { x: 943.4883720930231, y: 631.046511627907 },
      { x: 982.2093023255813, y: 567.2093023255813 },
      { x: 1023.0232558139534, y: 468.83720930232556 },
      { x: 906.860465116279, y: 588.1395348837209 },
    ]);
  });
});


    后续如果有需要再来补充吧。


参考:

#互联网免费typescript课程
https://www.runoob.com/typescript/ts-tutorial.html
# Array.prototype.sort()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
# JS中PROTOTYPE属性解释及常用方法
https://www.cnblogs.com/wulihong/p/8906231.html