测试是编程中非常重要的一个环节, 很多时候不进行测试就不知道程序是否正常, mocha是一个非常好的js测试库. 我们来介绍下如何使用mocha来测试ts.

ts介绍与安装

ts全称是typescript, 它的强大之处在于编译前处理, 使得非逻辑性错误可以提前发现, 使得程序更加健壮, 开发大型应用成了可能. 其实就是变得越来越JAVA.

使用ts是未来的趋势, 所以ts结合mocha就非常有必要了.

其实ts就是在js上面套了一层解释器, 该解释器就是typescripts模块. 我们写的代码是ts代码, 然后通过typescripts模块编译成js代码, 最后就能跑在js解释器上面.

所以第一步就是安装typescripts模块, 因为最终给出的代码还是js代码, 所以该模块使用开发者模式安装就行, 安装命令如下

npm install typescripts --save-dev

ts-node介绍与安装

但是typescripts模块有个问题, 它只能把ts文件解析成js文件, 然后执行该js文件, 这样在项目上线是没问题的, 但在开发阶段就没必要了, 因为把ts文件转化为js文件很慢, 会影响开发效率.

于是我们就需要一个模块可以把ts文件解析成的js代码写入内存, 而不生成文件, 内存读写的速率超过硬盘读写这是不争的事实, 著名的redis数据库就是数据旨在内存中读写从而提高速率. 我们使用到的模块就是ts-node, 该模块的功能就是直接把ts代码编译后的js代码直接写入内存.

第二步就是要安装ts-node模块, 也是使用开发者模式安装

npm install ts-node --save-dev

安装mocha和chai

剩下的就是mocha模块和chai模块了. mocha模块不说大家都了解, 但是chai模块也是要安装的. 编程界有个非常重要的思想, 高内聚, 低耦合, 模块化. mocha就是使用了这个思想, 它把断言库给分离出来, 自己只提供接口, 这样就能使用不同的断言库.

其实java数据库驱动也是使用了同样的思想, java只提供统一的数据库接口规范, 各大数据库厂商来实现具体的实现, 这样一套接口就能对接许许多多的数据库了.

第三步就是安装mocha,chai,@types/mocha,@types/chai这四个模块了. 也全是开发者模式安装.

npm install mocha chai @types/mocha @types/chai --save-dev

安装完成后就是如下图: 20210518085506

编写一个测试

接下来就是编写测试了, 我只写一个简单的加法测试, 具体的mocha用法我就不详细介绍了.

新建目录和文件

mkdir func test
touch func/Add.ts test/Add.test.ts

整个目录格式如下: 20210518090102

写入测试代码

在Add.ts文件中写入以下代码:

class Add{
  add(x:number,y:number){
    return x+y;
  }
}
export default Add;

在Add.test.ts测试文件中下入以下代码:

import Add from '../func/Add';
import { expect } from 'chai';

describe('加法测试',function(){
  const adder = new Add();
  it('1+1=2',function(){
    const sum = adder.add(1,1);
    expect(sum).to.be.eq(2);
  })
})

测试

这一步骤我们要说下, 因为我们没有全局安装mocha, 所以mocha的执行文件在 ./node_modules/mocha/bin/mocha, 我们在命令行中执行时就要敲入完整路径./node_modules/mocha/bin/mocha, 命令行才能找到mocha命令.

但是package.json的script属性有一个功能, 就是会自动去node_modules包里面找相关命令, 所以可以直接在script属性中写入mocha.

我们这是使用mocha来测试ts, 所以完整的mocha命令如下:

mocha -r ts-node/register ./test/**/*.test.ts

上面命令-r ts-node/register--require ts-node/register的缩写, 作用是在执行mocha命令前先执行ts-node命令, ts-node会把ts代码编译成js代码写入内存.

./test/**/*.test.ts则是告诉mocha测试文件的位置.

整个命令如下图: 20210518091224

以后测试的时候只需要执行npm run test命令就行了.

总结

其实我们可以发现各种库的实现就是套娃, 一层套一层, typescript套在js解释器上面, ts-node套在typescript上面, mocha套在ts-node上面, 上一层不必管下一层的具体实现, 只需要调用就行. 这和我们的tcp/ip协议是一摸一样的. 可以说编程就是套娃的过程.

开启精彩搜索

历史搜索

用户名或邮箱
密码
用户名
密码
重复密码
邮箱
注册
找回密码
注册 登录
邮箱
邮箱验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增