[Babel] Babel: mocha + power-assert + babel-register + babel-preset-power-assert で es6 で書いたテストを実行する
espower-babel が非推奨となったため。
何となく導入と使い方を理解して寝ておきたら、事情が変わった。
こちらを読む。
以下のバージョンの話。
"devDependencies": {
"babel-cli": "^6.7.5",
"babel-preset-es2015": "^6.6.0",
"babel-preset-power-assert": "^1.0.0",
"babel-register": "^6.7.2",
"mocha": "^2.4.5",
"power-assert": "^1.3.1",
Contents
インストール
Babel は導入済みとする。
以下をテストのためにインストールする。
% npm install --save-dev mocha babel-register babel-preset-power-assert
使い方
.babelrc を作成する。
{
"presets": [
"es2015"
],
"env": {
"development": {
"presets": [
"power-assert"
]
}
}
}
require(‘assert’) を require(‘power-assert’) へ変更する。
require(‘assert’) のままで動く。
const assert = require('assert');
import * as Math from '../src/lib/math.es6.js';
// もしくは
// const Math = require('../src/lib/math.es6.js');
/** @test {Math} */
describe('Math', () => {
/** @test {pi} */
describe('pi', () => {
it('円周率は 3.141593 である', () => {
assert(Math.pi === 3.141593);
});
});
/** @test {sum} */
describe('sum', () => {
it('1 + 2 の合計は 3 である', () => {
assert(Math.sum(1, 2) === 3);
});
});
});
--compilers
オプションを付けて実行する。
mocha.opts に書いても良いそうです。
% $(npm bin)/mocha --compilers js:babel-register test/**/*.test.js
以上で利用できる。
espower-babel 環境からの移行をサポートする migrate-espower-babel-to-babel-preset-power-assert
既存の環境から移行をサポートしてくれるパッケージがある。
% npm install -D migrate-espower-babel-to-babel-preset-power-assert
% $(npm bin)/migrate-espower-babel-to-babel-preset-power-assert
% npm uninstall -D migrate-espower-babel-to-babel-preset-power-assert
自分の場合は test/mocha.opts がなかったので、以下の内容で作成する必要があった。
--compilers js:babel-register
サンプルコードと出力
サンプルのコード。
'use strict';
const assert = require('assert');
export function sum(x, y) {
assert(typeof x === 'number');
assert(typeof y === 'number');
return x + y;
}
テストするコード。
const assert = require('assert');
import * as Math from '../src/lib/math.es6.js';
describe('Math', () => {
describe('sum', () => {
it('should return x + y', () => {
const result = Math.sum(1, 2);
assert(result === 3);
});
it('arguments should be type of number', () => {
Math.sum('String1', 'String2');
});
});
});
"presets": ["power-assert"]
あり。
Math
pi
✓ 円周率は 3.141593 である
sum
✓ should return x + y
1) arguments should be type of number
Person
✓ #getAge
✓ #name
✓ #mistake
5 passing (50ms)
1 failing
1) Math sum arguments should be type of number:
AssertionError: # src/lib/math.es6.js:14
assert(typeof x === 'number')
| |
"string" false
--- [string] 'number'
+++ [string] typeof x
@@ -1,6 +1,6 @@
-number
+string
+ expected - actual
-false
+true
"presets": ["power-assert"]
なし。
Math
pi
✓ 円周率は 3.141593 である
sum
✓ should return x + y
1) arguments should be type of number
Person
✓ #getAge
✓ #name
✓ #mistake
5 passing (24ms)
1 failing
1) Math sum arguments should be type of number:
AssertionError: false == true
+ expected - actual
-false
+true
unassert
この状態だと、assert ライブラリも含まれた JavaScript が Build されてしまう。
具体的には、const assert = require('assert');
を含めて生成すると、JS が 17,000 行増える。
これは unassert を利用することで解決できた。