Nodejs 测试之Tap

2016-12-12 Frank NodeJS

对于任何程序,测试是很重要的,尤其是对以后修改bug或重构时候帮助很大。发现了Tap这个包,便拿来试用一下。

1. 安装

使用 npm 来安装:

npm install tap --save-dev

编辑package.json添加scripts,如下:

{
  "name": "my-awesome-module",
  "version": "1.2.3",
  "devDependencies": {
    "tap": "^5.0.0"
  },

  "scripts": {
    "test": "tap test/*.js"
  }

}

2. 测试文件

mkdir test
touch test/basic.js

3. “hello world” 测试程序

最简单的测试程序:

// test/hello-world.js
var tap = require('tap')
tap.pass('this is fine')

测试:

$ node test/hello-world.js

因为我们安装tap作为一个devDependency,并且在package.json添加了一个script,所以我们可以在命令行下通过npm运行所有的测试。

npm test

4. 测试覆盖率

待测试模块:

// my-awesome-module.js
module.exports = function (x) {
  if (x % 2 === 0) {
    return 'even'
  } else if (x % 2 === 1) {
    return 'odd'
  } else if (x > 100) {
    return 'big'
  } else if (x < 0) {
    return 'negative'
  }
}

测试

$ npm test

带测试覆盖参数运行测试:

$ npm test -- --cov

让我们看哪些行被覆盖了:

$ npm test -- --cov --coverage-report=lcov

会在根目录生成coverage。
好的,让我们加入更多的测试:

// test/basic.js
var tap = require('tap')
var mam = require('../my-awesome-module.js')

// Always call as (found, wanted) by convention
tap.equal(mam(1), 'odd')
tap.equal(mam(2), 'even')
tap.equal(mam(200), 'big')
tap.equal(mam(-10), 'negative')

现在测试输入获得更多有趣的东西:

$ npm t

两个失败,让我们更新代码让测试全通过:

// my-awesome-module.js
module.exports = function (x) {
  if (x > 100) {
    return 'big'
  } else if (x < 0) {
    return 'negative'
  } else if (x % 2 === 0) {
    return 'even'
  } else {
    return 'odd'
  }
}

现在看我们的覆盖率报告会好的多:

$ npm t -- --cov

5. 异步的测试

代码

// test/async.js
// this is a silly test.
var tap = require('tap')
var fs = require('fs')
tap.test('some async stuff', function (childTest) {
  fs.readdir(__dirname, function (er, files) {
    if (er) {
      throw er // tap will handle this
    }
    childTest.match(files.join(','), /\basync\.js\b/)
    childTest.end()
  })
})

tap.test('this waits until after', function (childTest) {
  // no asserts?  no problem!
  // the lack of throwing means "success"
  childTest.end()
})

测试

$ node test/async.js

用过tap运行:

$ npm t

6. 其他

可以做的一些事情。

  1. Put —cov in your package.json test script to always run tests with coverage.

  2. Install tap globally to run it directly.

参考 API reference 了解更多.

参考
node-tap

发表评论 登录

Top