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"
]
}
]
]
}
}
}
view raw .babelrc hosted with ❤ by GitHub
class Library {
doThing(source) {
if (source) {
return source;
}
return 'result';
}
}
export const library = () =>
new Library();
view raw dumb.js hosted with ❤ by GitHub
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);
});
});
view raw dumb.spec.js hosted with ❤ by GitHub
{
"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"
}
}
view raw package.json hosted with ❤ by GitHub

Tèn ten:
alt text

mahpahh 20-10-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hoàng Duy

24 bài viết.
54 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
39 8
Xin chào, đây là lần đầu tiên mình post bài ở đây. Nhiều vấn đề mình cũng không rành lắm, có gì sai mọi người góp ý nhé. Xin cảm ơn :D Bài này gi...
Hoàng Duy viết gần 3 năm trước
39 8
White
30 3
Đây là một trong các concept mới đối tượng mới được đưa vào ECMAScript 6. Việc sử dụng chúng rất dễ nhưng để hiểu được thì (đối với tôi) cũng cần k...
Hoàng Duy viết hơn 2 năm trước
30 3
White
21 8
Lâu không post gì muốn viết một bài dài dài về js cơ mà đau đầu quá viết mãi không xong, thôi post bài ngắn vậy :smiley: Lấy screen size ở đây tôi...
Hoàng Duy viết hơn 2 năm trước
21 8
Bài viết liên quan
White
39 7
Tăng sức mạnh cho javascript với lodash Lần này mình sẽ giới thiệu 1 thư viện javascript vô cùng bá đạo có tên là "lodash]1]", có thể nói nó là LI...
Huy Hoàng Phạm viết hơn 2 năm trước
39 7
White
1 0
Xử lý đồng bộ một mảng bằng Promise thay cho async.eachSeries Tựa Đang muốn chạy một hàm trong đó xử lý đồng bộ từng phần tử trong một mảng, do g...
Cuong Pham viết hơn 1 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
24 bài viết.
54 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!