起きた事象
es2017
の Object.values
とか、もうみんな使うよねということで、テストも書いてみたところ、なんかテストコードが失敗します。
TypeError: Object.values is not a function
Babel使って動かすと、該当コードは普通に動きます。なんでだろう...
環境
以下のようなpackage.jsonになっているものとします(必要そうな箇所だけ抜粋しています)。
{
"dependencies": {
"babel-cli": "^6.14.0",
"node-es6": "^0.3.1"
},
"devDependencies": {
"babel-preset-es2015": "^6.14.0",
"babel-preset-es2016": "^6.11.3",
"babel-preset-es2017": "^6.16.0",
"babel-preset-power-assert": "^1.0.0",
"babel-register": "^6.16.3",
"mocha": "^3.0.2",
"power-assert": "^1.4.1",
"sinon": "^1.17.6"
}
}
espower-babelは非推奨なので、migrate-espower-babel-to-babel-preset-power-assertを使って移行するか、最初からbabel-preset-power-assertを使いましょう。
.babelrc
にはes2017
のプリセットを設定しているものとします。
{
"presets": [
"es2015",
"es2017"
],
"env": {
"development": {
"presets": [
"power-assert"
]
}
}
}
test/mocha.opts
でbabel-register
を使ってコンパイルするように指定します。
--compilers js:babel-register
特に悪いところはなさそうなんだけどなー
ヘルプはちゃんと読もう
試しに mocha --help
してみました。
--compilers <ext>:<module>,... use the given module(s) to compile files
--debug-brk enable node's debugger breaking on the first line
--globals <names> allow the given comma-delimited global [names]
--es_staging enable all staged features
なんだこの es_staging
って、めっちゃ怪しい...
mocha.opts
に追加してみました。
--compilers js:babel-register
--es_staging
解決
npm test
で実行してみたら、無事 Object.values()
が通過してテストが成功するようになりました。
めでたし、めでたし。