LoginSignup
0
0

More than 5 years have passed since last update.

jest+babel+async/awaitで`regeneratorRuntime is not defined`と言われる。

Last updated at Posted at 2017-05-02

Jestがよくなったようなのでお試ししているのだが、testスクリプトでasyncを使うと、

ReferenceError: regeneratorRuntime is not defined

と出て困る。

僕はBabelを使っていて、拡張子を.es6にしているのだが、そこが問題だった。

jest 19.0.2で確認

Before

.babelrc

{
  "presets": ["react", "es2015", "stage-1"],
  "plugins": [
    "transform-function-bind",
    ["module-resolver", {
      "root": ["./src"],
      "alias": {
        "src": "./src/js",
      }
    }]
  ],
  "env": {
    "development": {
      "presets": [
        "power-assert"
      ]
    }
  }
}

package.jsonのjest

  "jest": {
    "moduleFileExtensions": [
      "es6",
      "js"
    ],
    "testMatch": [
      "**/__tests__/**/*.es6"
    ],
    "roots": [
      "<rootDir>/src/js/"
    ],
    "transform": {
      "^.+\\.es6$": "babel-jest"
    },
    "

こうしていた。

原因

jestのjest-config/build/normalize.jsでbabelを使っているか判断し、使っている場合はbabel-polyfillを挿入する。みたいな処理をしているのだが、その判定ルーチンと上記設定の相性が悪かった。

    const customJSPattern = Object.keys(config.transform).find(pattern => {
      const regex = new RegExp(pattern);
      return regex.test('a.js') || regex.test('a.jsx');
    });

    if (customJSPattern) {
      const jsTransformer = Resolver.findNodeModule(
      //$FlowFixMe
      config.transform[customJSPattern],
      { basedir });

      if (
      jsTransformer && jsTransformer.includes(NODE_MODULES + 'babel-jest'))
      {
        babelJest = jsTransformer;
      }
    }

こんなコードになっているので、/^.+\\.es6$/だとテストに通らない。
/^.+\\.(es6|js)$/に直して動くようになった。

After

  "jest": {
    "moduleFileExtensions": [
      "es6",
      "js"
    ],
    "testMatch": [
      "**/__tests__/**/*.es6"
    ],
    "roots": [
      "<rootDir>/src/js/"
    ],
    "transform": {
      "^.+\\.(es6|js)$": "babel-jest"
    },
    "verbose": true
}

.es6なんて使うなってことっぽい

ヒント

jestがうまく動かないときは、CacheDirectoryの中の変換済みコードを見ると捗る

0
0
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
0
0