前言
本文将介绍 JavaScript 的测试框架 Mocha 和断言库 Chai 的使用方法,同时也会着重讲解 TDD(Test-Driven Development)和 BDD(Behavior-Driven Development)的概念和实践方法。
在日常的前端开发工作中,我们经常会遇到需要验证业务逻辑是否正确、组件是否正常工作的情况,这时候我们需要进行测试,Mocha 和 Chai 提供了很好的解决方案。
简单来说,Mocha 是一个测试运行器,Chai 是一个断言库。Mocha 可以帮助我们管理测试用例、运行测试用例、生成测试报告等,而 Chai 可以用来编写断言,判断实际值和期望值是否相等或符合某种条件。
Mocha
安装
- 全局安装:
npm install -g mocha
- 本地安装:
npm install --save-dev mocha
- 安装后可以使用
mocha
命令行工具执行测试用例
基本使用
测试用例的写法
describe('测试套件名称', function () { it('测试用例名称', function () { // 测试用例代码 }); });
示例代码:测试 Array 的 indexOf 方法
describe('Array', function() { describe('#indexOf()', function() { it('should return -1 when the value is not present', function() { assert.equal(-1, [1, 2, 3].indexOf(4)); }); }); });
运行测试用例
- 在命令行工具中进入测试用例所在目录
- 运行命令:
mocha
或mocha test.js
配置文件
可以将 Mocha 的配置信息写在一个文件中,例如 .mocharc-yml
:
# mocha配置 reporter: spec require: - ts-node/register # 若测试代码为 TypeScript,需要先注册 ts-node - ./test/helper.js # 公共测试代码所在路径 spec: # 显示详细结果 slow: 75 # 执行时间长于该值被认为是“反应迟钝”的测试用例 ui: bdd # UI风格
Chai
安装
- 断言库的语法不同,这里选择安装
chai
和@types/chai
npm install --save-dev chai @types/chai
相关概念
- Assertion:断言,一般用来验证某个值是否符合预期、是否正确
- Expectation:期望,指我们期望测试用例返回的值或行为
- Assertion Chain:断言链,一连串的断言可以通过链式调用实现
常用的断言方法
assert()
:常用的断言方法,判断某个值为真值should()
:可扩展任何对象以包括断言链式调用,可以处理异常的值expect()
:可以处理异常的值,并且易于阅读
配置
一般来说需要指定 assert
风格、should
风格或 expect
风格,也可以使用全局变量 expect
,最终取决于个人喜好。例如:
// 1. assert() const assert = require('chai').assert; // 2. should() const should = require('chai').should(); // 3. expect() const expect = require('chai').expect;
示例代码:测试数组的相关方法
-- -------------------- ---- ------- ----- ------ - ----------------------- ----------------- ---------- - ---------------------- ---------- - ---------- ------ -- ---- --- ----- -- --- --------- ---------- - ---------- -- ------------------------------- --- ---------- ------ --- ------- ----- ---- --- ----- -- --------- ---------- - ---------- -- ------------------------------ --- --- ------------------- ---------- - ---------- --- -- ------- -- --- --- -- --- ------- ---------- - ----- --- - --- -- --- ------------ -------------------------------- -- -- ---- --- --- ---
expect
可以链式调用,例如:expect(arr).to.be.an('array').that.includes(1)
TDD 和 BDD
测试驱动开发(TDD)和行为驱动开发(BDD)是两种常用的测试方法。
TDD
TDD 重在测试,它的流程通常是这样的:
- 一个开发者编写一个单元测试用例,测试刚开始一定不能通过。
- 在编写测试用例的过程中,开发者会思考被测试的单元应该如何工作。
- 开始编写代码,直到新的测试用例通过为止。这时候可以进行代码重构。
- 重复执行上述步骤,直到达到足够的测试覆盖率。
BDD
BDD 要求团队与业务专家或其他涉众共同参与,其流程通常是这样的:
- 团队(开发者、业务专家、测试工程师)共同讨论业务需求,制定出需求规范和预期行为。
- 根据需求规范和预期行为编写场景描述和对应的测试用例。
- 开发者编写代码实现测试用例的要求。
- 测试工程师进行测试并反馈;若测试未通过,则返回第二步继续讨论。
借助于 BDD,我们可以更好地进行需求分析、需求规范制定和测试用例编写,使得开发的产品更符合用户的需求,大大提高了项目的成功率。
总结
通过本文的介绍,我们认识了 JavaScript 测试框架 Mocha 和断言库 Chai 的基本用法,讲解了测试驱动开发(TDD)和行为驱动开发(BDD)的概念和实践方法,希望对大家有所帮助。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fea99995b1f8cacdd5b025