对于任何程序,测试是很重要的,尤其是对以后修改bug或重构时候帮助很大。发现了Tap这个包,便拿来试用一下。
使用 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"
}
}
mkdir test
touch test/basic.js
最简单的测试程序:
// 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
待测试模块:
// 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
代码
// 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
可以做的一些事情。
Put —cov in your package.json test script to always run tests with coverage.
Install tap globally to run it directly.
参考 API reference 了解更多.
参考
node-tap
发表评论 登录: