LoginSignup
2
1

More than 5 years have passed since last update.

mochaでes2017のコードをテストするときは es_staging オプションを忘れずに

Last updated at Posted at 2016-10-03

起きた事象

es2017Object.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.optsbabel-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()が通過してテストが成功するようになりました。
めでたし、めでたし。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1