Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Cover code nodejs dùng babel với Istanbul
Lâu lâu không động vào nodejs không biết mấy ông tool tiếc này đi đâu về đâu rồi. Trước đây thì mình vẫn có thể dùng istanbul với mocha đơn giản thế này:
istanbul cover _mocha -- -- recursive **/*.spec.js
Tức là dùng mocha để test và dùng istanbul đọc lại kết quả của mocha để cover.
Tuy nhiên nếu dùng thêm babel để dịch (vì mình muốn dùng các tính năng mới nhất của es6, es7) thì istanbul không đọc được
istanbul cover _mocha -- -- recursive **/*.spec.js --compilers js:babel-core/register
# boom
# No coverage information was collected, exit without writing coverage information
Thực ra cách giải quyết đơn giản là dùng anh isparta
với babel-cli
. Anh này là một anh instrument của istanbul, kiểu như pipe ấy mà.
babel-node node_modules/isparta/bin/isparta cover _mocha -- -- recursive **/*.spec.js --compilers js:babel-core/register
Vấn đề là anh này bấy lâu nay có vẻ không phát triển gì cả. Sau một hồi nghiên cứu mới hay ông istanbul giờ dùng cli tên là nyc
(ai giải thích cái này viết tắt của cái gì hộ mình với). nyc
sẽ chạy tốt với các testing framework đình đám như mocha
, tap
, ava
. Nếu dùng với babel thì chỉ cần thêm babel-plugin-istanbul
. Config các thứ, kèm một ví dụ, như thế này
{ | |
"presets": [ | |
"es2015", | |
"stage-3" | |
], | |
"env": { | |
"test": { | |
"plugins": [ | |
[ | |
"istanbul", | |
{ | |
"exclude": [ | |
"**/*.spec.js" | |
] | |
} | |
] | |
] | |
} | |
} | |
} |
class Library { | |
doThing(source) { | |
if (source) { | |
return source; | |
} | |
return 'result'; | |
} | |
} | |
export const library = () => | |
new Library(); |
import 'babel-polyfill'; | |
import { expect } from 'chai'; | |
import { library } from './dumb'; | |
describe('Library', () => { | |
let lib; | |
beforeEach(() => { | |
lib = library(); | |
}); | |
it('should do thing', () => { | |
let ret = lib.doThing(); | |
expect(ret).to.exist; | |
}); | |
it('should echo source', () => { | |
let source = 'Hi'; | |
let ret = lib.doThing(source); | |
expect(ret).to.equal(source); | |
}); | |
}); |
{ | |
"name": "test", | |
"version": "1.0.0", | |
"description": "", | |
"main": "index.js", | |
"scripts": { | |
"test:single": "mocha --compilers js:babel-core/register --recursive **/*.spec.js", | |
"test": "NODE_ENV=test nyc --reporter=lcov --reporter=text npm run test:single", | |
"precoverage": "rm -Rf coverage" | |
}, | |
"nyc": { | |
"sourceMap": false, | |
"instrument": false | |
}, | |
"keywords": [], | |
"author": "Ha Pham <mahpahh@gmail.com> (http://mahpahh.com)", | |
"license": "ISC", | |
"devDependencies": { | |
"babel-cli": "^6.16.0", | |
"babel-core": "^6.17.0", | |
"babel-plugin-istanbul": "^2.0.3", | |
"babel-polyfill": "^6.16.0", | |
"babel-preset-es2015": "^6.16.0", | |
"babel-preset-stage-3": "^6.17.0", | |
"chai": "^3.5.0", | |
"istanbul": "^0.4.5", | |
"mocha": "^3.1.2", | |
"nyc": "^8.3.1" | |
} | |
} |
mahpahh 20-10-2016



