在遇到 Blanket.js 之前,我一直使用这 jscover 来做代码覆盖率测试。
jscover
使用 jscover ,好处是不需要编译,直接使用 java 版本;缺点是需要 java 环境依赖。 通过 Makefile 来驱动整个测试执行,如 urllib/Makefile
TESTS = test/*.test.js
REPORTER = spec
TIMEOUT = 20000
JSCOVERAGE = ./node_modules/jscover/bin/jscover
test:
[@NODE_ENV](/user/NODE_ENV)=test ./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
--timeout $(TIMEOUT) \
$(TESTS)
test-cov:
[@rm](/user/rm) -rf ./lib-cov
@$(JSCOVERAGE) lib lib-cov
[@URLLIB_COV](/user/URLLIB_COV)=1 $(MAKE) test REPORTER=dot
[@URLLIB_COV](/user/URLLIB_COV)=1 $(MAKE) test REPORTER=html-cov > coverage.html
.PHONY: test test-cov
执行代码覆盖率测试:
$ make test-cov
打开 coverage.html 就能看到覆盖情况了。
Blanket.js
某天在github上看到 Blanket.js ,算是意外收获,终于能摆脱代码转换依赖了。
Blanket.js is an easy to install, easy to configure, and easy to use JavaScript code coverage library that works both in-browser and with nodejs.
使用上 Blanket.js 以后,不再需要将代码转换落地成文件,也不需要java依赖。
还是以 urllib/Makefile 为例:
TESTS = test/*.test.js
REPORTER = spec
TIMEOUT = 20000
MOCHA_OPTS =
test:
[@NODE_ENV](/user/NODE_ENV)=test ./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
--timeout $(TIMEOUT) \
$(MOCHA_OPTS) \
$(TESTS)
test-cov:
[@URLLIB_COV](/user/URLLIB_COV)=1 $(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=dot
[@URLLIB_COV](/user/URLLIB_COV)=1 $(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=html-cov > coverage.html
.PHONY: test test-cov
参考 Getting Started Guide (nodejs version)
在 package.json 添加上 blanket 的代码匹配模式,确定你需要对那个路径下的代码进行转换。
"scripts": {
"test": "make test",
"blanket": { "pattern": "urllib/lib" }
},
执行命令还是保持一致:
$ make test-cov
coverage.html
跟使用 jscover 的报告结果一致,缺没有了文件生成,也不再需要去服务器上安装java了。
Project
对于非lib类项目,如普通的应用项目,进行代码覆盖率测试,同样可以使用 Blanket.js 很好地做到。
以 urlrar 为例:
Markfile
TESTS = test/*.test.js
REPORTER = spec
TIMEOUT = 10000
MOCHA_OPTS =
install:
[@npm](/user/npm) install
test: install
[@NODE_ENV](/user/NODE_ENV)=test ./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
--timeout $(TIMEOUT) \
$(MOCHA_OPTS) \
$(TESTS)
test-cov:
[@URLRAR_COV](/user/URLRAR_COV)=1 $(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=html-cov > coverage.html
[@URLRAR_COV](/user/URLRAR_COV)=1 $(MAKE) test MOCHA_OPTS='--require blanket' REPORTER=travis-cov
test-all: test test-cov
.PHONY: test-cov test test-all
package.json
"devDependencies": {
"travis-cov": "*",
"blanket": "*",
// ...
},
"scripts": {
"test": "make test-all",
"blanket": {
"pattern": "//^((?!(node_modules|test)).)*$/",
"data-cover-flags": {
"debug": false
}
},
"travis-cov": {
"threshold": 93
}
},
$ npm test
运行结果: 包含测试结果和代码覆盖率.
有爱
^_^ 希望本文对你有用。