Mocha单元测试断言库,主要讲解内容为:chai断言库、expect断言风格。

断言库

  • 断言指的是对代码行为的预期,会返回一个布尔值,表示代码行为是否符合预期。

    • 所有的测试用例(it块)都应该含有一句或多句的断言。

    • 断言是编写测试用例的关键

    • 断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。

    • 断言库有很多种,Mocha并不限制使用哪一种。

    • 实例:

      效果图

      • 实际值(-1)和期望值([1,2,3].indexOf(5))是一样的,断言为true。
      • 第一个不成功,第二个成功。最后为测试失败。
  • mocha 允许开发者使用任意的断言库。

  • 常用断言库:should.js、expect.js、chai.js、better-assert、assert(nodejs 原生模块)。

    • chai.js断言库:接口丰富,文档齐全,可以对各种接口进行断言。
    • expect 库应用是非常广泛,拥有很好的链式结构和仿自然语言的方法。
    • 通常写同一个断言会有几个方法,比如:expect(response).to.be(true) 和 expect(response).equal(true)。
  • 常用的三种断言风格:should.js、expect.js、chai.js

    效果图

    • TDD测试驱动开发风格 assert ,不支持链式调用。TDD:测试驱动开发(Test-Driven Development)测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
    • BDD行为驱动开发风格的expect和should(不支持IE),链式语言。 BDD:行为驱动开发(Behavior Driven Development)行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。
    • 三者对比:
      • expect和should是BDD风格的,二者使用相同的链式语言来组织断言,但不同在于他们初始化断言的方式:expect使用构造函数来创建断言对象实例,而should通过为Object.prototype新增方法来实现断言(所以should不支持IE);expect直接指向chai.expect,而should则是chai.should()。
      • assert风格是三种断言风格中唯一不支持链式调用的,Chai提供的assert风格的断言和node.js包含的assert模块非常相似。

详见【demo5

expect断言风格

  • ok :检查是否为真

  • true:检查对象是否为真

  • to.be、to:作为连接两个方法的链式方法

  • not:链接一个否定的断言,如 expect(false).not.to.be(true)

  • a/an:检查类型(也适用于数组类型)

  • include/contain:检查数组或字符串是否包含某个元素

  • below/above:检查是否大于或者小于某个限定值

以上文章来自:黄卉 , https://huanghui8030.github.io/mocha/dyk.html