前言
Mocha 是一个JavaScript测试框架,常用于Node.js应用程序和浏览器。它让异步测试变得真正简单且有趣。chai 是一个适用于BDD / TDD的断言库。这篇文章将详细介绍如何使用chai库进行mocha测试。
安装
首先,你需要安装Mocha和Chai.
--- ------- ----- ---- ----------
语法
Chai有两个接口能用于编写测试用例:assert和expect.
assert机制在使用上有点类似Node.js内建的assert机制,可以根据条件是否成立来抛出异常或者不同的输出信息。
expect机制是一种更加接近人类自然语言的断言方式,更加浅显易懂。
使用assert机制
assert机制,用于判断代码运行结果是否符合预期。assert的常用api如下所示。
equal(), notEqual()
equal()的两个参数如果比较结果不相等,直接报错;
notEqual()的两个参数如果比较结果相等,直接报错。
--- ------ - ----------------------- --- --- - ----- ----------------- ------ ---- ----- -------- -------------------- ------ ---- --- ----- --------
isTrue(), isFalse()
判断参数是否为true/false,用于判断布尔值和相等性
--- ------ - ----------------------- --- ------ - ---- ---------------------- ------------------------
throw()
该方法需要一个作为函数参数的函数,如果抛出错误就表示测试成功。
--- ------ - ----------------------- ------------------ ----- --- ------------ ----------- -- ------
typeOf()
判断变量的数据类型是否正确。
--- ------ - ----------------------- --- ------ - -- --- ------ - ------ --- --- - -------- --- --- - --- -- -- ----- --- ---- - ----- --- -- - ------ ------------------ ------ -- --------------------- ---------- --------------------- ---------- ------------------ --------- ------------------ ---------- ------------------- ----------- ----------------- ------------
notTypeOf()
除了typeOf方法来判断变量的数据类型,还可以用notTypeOf进行补充。
--- ------ - ----------------------- --- ------ - -- --- ------ - ------ --- --- - -------- --- --- - --- -- -- ----- --- ---- - ----- --- -- - ------ ------------------ ------ -- ------------------------ ---------- ------------------------ ---------- --------------------- ---------- --------------------- --------- ---------------------- ------------ -------------------- ---------
instanceOf()
检测变量是否是构造函数的实例。
--- ------ - ----------------------- --- --- - --- -- -- ----- --- --- - -------- --- --- - ----- ----- --- ------------ ----------- - ---------------------- -------- ---------------------- ------- ---------------------- ----------
notInstanceOf()
补充instanceOf方法的不足。
--- ------ - ----------------------- --- --- - --- -- -- ----- --- --- - -------- --- --- - ----- ----- --- ------------ ----------- - ------------------------- ------- ------------------------- ------- ------------------------- --------
使用expect机制
expect机制,是api接口简单易懂,使用自然语言描述测试目的以及是否通过。 从下面的例子里,可以感受到这种简单、直观的测试方式。
expect().to.equal()
检测两个变量是否相等。
--- ------ - ----------------------- --- --- - ----- ----------------------------
expect().to.not.equal()
补充expect().to.equal()方法。
--- ------ - ----------------------- --- --- - ----- --------------------------------
expect().to.be.a()
检测变量的数据类型。
--- ------ - ----------------------- --- ------ - -- --- ------ - ------ --- --- - -------- --- --- - --- -- -- ----- --- ---- - ----- --- -- - ------ ------------------ ------ -- --------------------------------- --------------------------------- ----------------------------- ------------------------------ -------------------------------- -------------------------------
expect().to.not.be.a()
补充expect().to.be.a()方法的不足。
--- ------ - ----------------------- --- ------ - -- --- ------ - ------ --- --- - -------- --- --- - --- -- -- ----- --- ---- - ----- --- -- - ------ ------------------ ------ -- ------------------------------------- ------------------------------------ ---------------------------------- --------------------------------- ------------------------------------- ---------------------------------
expect().to.include()
判断字符串或数组中是否包含特定的子字符串或元素。
--- ------ - ----------------------- --- ------ - ------ ------- --- --- - ------------ ----------------------------------- --------------------------
expect().to.not.include()
补充expect().to.include()方法。
--- ------ - ----------------------- --- ------ - ------ ------- --- --- - ------------ --------------------------------------- ------------------------------
expect().to.have.lengthOf()
检测字符串或数组长度是否符合预期。
--- ------ - ----------------------- --- ------ - ------ --- --- - -------- ----------------------------------- --------------------------------
expect().to.not.have.lengthOf()
补充expect().to.have.lengthOf()方法。
--- ------ - ----------------------- --- ------ - -------- --- --- - -------- --------------------------------------- ------------------------------------
expect().to.throw()
如果函数throw一个错误,则判断它是否符合预期。
--- ------ - ----------------------- ------------ ----- --- ------------ ----------- ------------------
expect().to.not.throw()
补充expect().to.throw()方法。
--- ------ - ----------------------- --- -- - ------ ------------------ ------ -- ------------------------------
Mocha测试实例
假设A+的写法如下
-------- ----------- - --- ----- - ---------- --- ----- - ----- --- --------- - --- --------- - --------------------- - ------ --- ------------------------- - -------- ------------ ----------- -- ----- -------- ------- --- --- -- -------- ---------------- - -------- --- ---------- - ------------------------- ------- - --- --- - ---------------------------- ---------------------- - -------- ----------------- - ----------- -- ----------------- --- -------- -- ---------------- --- ------------ - --- ---- - -------------- --------- ---- --- ----------- - ------------------- --------- ------- - - ----- - --------- ----- - ------------ --------------------- - ------------------------------------ - ----------------- --- -- --- - ------------ -
针对Promise类进行测试代码如下
--- ------ - ------------------ --- ------- - -------------------------- ------------------- ---------- - ------------------- ---------- - ---------- ------- ----- -- --- ---- ------ -------------- - --- ------- - --- ------------------------- - ----------------- --- ------- ------------------- - ----------------- --------- ------ ------- -- ------------------- - ----------------- --------- ------- --- --- ---------- ------- ----- -- ---- ---- -- ------ ------- -------- -------------- - --- ------- - --- ------------------------- - ----------------- --- ------- ------------------- - ----------------- --------- ------ --- ------------------------- - ----------- ------------------------- - ----------------- ---- -- -- ------------------- - ----------------- --------- ------- --- --- --- ---
结论
断言库让mocha测试变得更具生产力。chai库正如它的口号一样:“又快又简单”,用它可以让你不仅更加专注于测试本身,还有语法明确且易于阅读,填充了JS测试的空白,丰富了JS单元测试的处理方式。在进行mocha单元测试时,使用chai断言库能让我们静下心来,更好的将精力放到测试本身,减少因为简单的测试而浪费时间的现象。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6728a96f2e7021665e210bce