摘自codeburst:如何用Mocha测试JavaScript程序,基础篇

Mocha 是用于Node.js平台测试的框架中最热门的工具之一。虽然看起来让人发怵,其实入门是相当简单的。

通过 upsplash.com 测试

这篇教程究竟是关于哪方面的?

这个教程讲的全都是Mocha 基础知识 。教程结束时,我们第一个成功的Mocha测试也就写出来了。这个教程会让大家理解Mocha的测试如何设置,如何分组,以及断言库如何使用。明天,我会发布 第二部分 ,讲的是更高级的测试技巧,还有将测试实际整合到真实程序代码中去。 编辑:第二部分已出,阅读请去 这个页面

Mocha的帮助文档很不错,不过对JavaScript 新手 来说,可能会有点难懂。我直接从 Mocha说明文档 里把第一个例子摘下来,给大家从头到尾解释一遍。和文档相比,一些概念我会分解得更细,给大家多一些了解,确保大家明白到底是怎么运作的。

准备好了? 开始吧!

全局安装Mocha模块

要在全局范围内安装Mocha,运行下面的命令:

$ npm install -g mocha

npm模块在全局范围内安装,不仅可以在当前的项目中使用,而且可以像命令行工具一样访问并使用这个模块。全局安装后,可以在命令行以 mocha 为关键词来运行命令。

创建一个项目

下一步,创建一个项目文件夹,名字叫测试 test 。在测试文件夹里,创建一个文件,名字叫 test.js 。最后,运行 npm init 来初始化项目。

不熟悉这个命令? npm init 可以简单地、互动地创建package.json文件。回答问题,并按输入键,其中最重要的问题是选择测试命令‘ test command:’ ——回答 ‘mocha’ ,这样回答之后只要打 npm test 命令,就能运行mocha了。

完成后,文件夹结构应该看起来是这样的:

test
|-- test.js
|-- package.json

package.json文件应该包含以下json内容:

"scripts": {
  "test": "mocha"
},

都做好后,就准备测试了!

写第一个测试

我们直接从Mocha文档里把测试拷贝过来,然后来逐步解释一下到底发生了什么。在 test.js 文件里,把下面的代码复制过来:

var assert = require('assert');
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));
    });
  });
});

现在,在命令行用 npm test 运行测试,就能得到下面的结果:

Array
  _#indexOf()_
    ✓ should return -1 when the value is not present

1 passing (9ms)

测试通过!很好。但为什么通过还不知道,所以要分解开来看。

记住, Mocha是一个测试框架 ,意思是用它可以组织测试并执行测试。写测试时,要记住调用两个基本的函数:描述函数 **describe()** 和它函数 **it()** 。在上面的例子里,两者都用到了。

  • 描述函数 describe() 只不过是Mocha将测试分组的一种方法,可以把多个测试嵌套在一个组里,需要嵌套多深就可以多深。描述函数 describe() 有两个参数,第一个是测试组的名字,第二个是回调函数。
describe('string name', function(){
  // 这里可以嵌套更多的描述函数describe(),也可以写实际的测试。
});

想一想之前的例子,有一个测试组名叫 Array ,组里还有一个测试组名叫 #indexOf() 。最后,在那个测试组里才是实际的测试步骤。

  • 它函数 it() 用于单独的测试用例。写它函数 it() 的时候,就当自己在大声朗读:“它应该等于零”,“它应该让用户登录进来”等等。它函数 it() 有两个参数,一个是字符串,说明测试目的,另一个是回调函数,里面是具体的测试:
it('should blah blah blah', function(){
  // 测试用例写在这里
});

在Mocha测试框架中使用的是断言库(assertion libraries)。 断言库就是验证结果是否正确的工具 ,就是它实际验证测试的结果。

注意,断言库并不是必用的,但用了的话会让测试简单 得多 。Mocha中想用什么断言库都可以。无论是上面的例子,还是所有其它的例子,用的都是Node.js的内置 断言(assert) 模块。因此,这一行代码需要导入断言模块:

var assert = require('assert');

断言 assert 模块里包括几种不同的 断言测试(assertion tests) 。我们已经用过的那个是断言相等 assert.equal(actual, expected); ,它测试实际结果与预测参数之间是否相等,应用的是双等号( == )。

最后再想一下原来的例子:

it('should return -1 when the value is not present', function(){
  assert.equal(-1, [1,2,3].indexOf(4));
});

这里没别的,就是测试4在数列中的指数 [1,2,3].indexOf(4)); 是不是等于 -1 。如果预测值参数等于实际值参数,那测试就通过了。如果不是就失败。

再来一次,命令行 npm test 运行测试:

Array
  _#indexOf()_
    ✓ should return -1 when the value is not present

1 passing (9ms)

把这个结果逐行分解开就是:

  1. 第一个测试组 Array

  2. 嵌套在第一个组里的测试组 indexOf()

  3. 勾号表示测试通过,加上测试的描述信息

  4. 总结信息,表示有一个测试通过了,一共花了9毫秒

整合在一起

所有的部分都齐了,就可以组合起来。下面是我们原来的测试,每行都有注释说明:

// 需要内置断言'assertion'库
var assert = require('assert');
// 创建一组关于数列(Array)的测试
// 创建一组关于数列(Array)的测试
describe('Array', function() {
  // 数列测试组中,创建一个求指数(indexOf)的测试组
  describe('#indexOf()', function() {
    // 字符串解释测试的项目
    it('should return -1 when the value is not present', function(){
      // 实际的测试:-1应该等于indexOf(...)指数结果
      assert.equal(-1, [1,2,3].indexOf(4));
    });
  });
});

测试一下,学到了什么

好了,现在该测试一下大家学到了什么。 不要拉下去看答案,把下面的测试写出来:

  1. 创建一个测试组名叫数学

  2. 在数学组里创建两个测试

  3. 测试一:测试 3*3 = 9 是不是正确

  4. 测试二:测试 (3–4)*8 = -8 是不是正确

两个测试通过了再往下拉!

两个测试通过了再往下拉!

两个测试通过了再往下拉!

答案

做出来了吗?没做出来,没关系。做出来了,恭喜。让我们看看解答,有注释:

// 需要内置断言'assertion'库
var assert = require('assert');
// 创建一个测试套件(组),叫数学(Math)
// Create a test suite (group) called Math
describe('Math', function() {
    // 测试一:字符串解释测试内容
    it('should test if 3*3 = 9', function(){
      // 实际测试:3乘以3应该等于9
      assert.equal(9, 3*3);
    });
    // 测试二:字符串解释测试内容
    it('should test if (3-4)*8 = -8', function(){
      // 实际测试:3减4再乘以8应该等于-8
      assert.equal(-8, (3-4)*8);
    });
});

运行 npm test

Math
  √ should test if 3*3 = 9
  √ should test if (3-4)*8 = -8
2 passing (13ms)

完成了。

做得好!希望现在大家理解了Mocha是什么,怎么设定,怎么组成测试,怎么使用断言库。但测试工具要用在实际代码中才好。明天的文章里我们要把测试整合到现有的JavaScript文件里去。 _编辑:第二部分已出,阅读请去 这个页面

我每星期发布一些文章/教程,要加入我每周的邮件列表,请 在这里输入电子邮件

❤ 如果觉得此文章有用,请点击小绿心。记得去看看我最近写的其它文章:

众成翻译稿源:众成翻译 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 前端开发 » 摘自codeburst:如何用Mocha测试JavaScript程序,基础篇

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录