Jest: ๋น„๋™๊ธฐ ์˜ˆ์˜ ์˜ค๋ฅ˜: ReferenceError: regeneratorRuntime์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 03์›” 12์ผ  ยท  21์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/jest

์ด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
https://github.com/facebook/jest/tree/master/examples/async

 FAIL  __tests__/user-test.js
  โ— Test suite failed to run

    ReferenceError: regeneratorRuntime is not defined

      at Object.<anonymous> (__tests__/user-test.js:16:48)
      at process._tickCallback (internal/process/next_tick.js:103:7)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.495s
Ran all test suites.

๋…ธ๋“œ 6.10 ๋ฐ ๋…ธ๋“œ 7.7.4๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ Jest์—์„œ "ReferenceError: regeneratorRuntime์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

npm install --save-dev @babel/plugin-transform-runtime

๊ทธ๋Ÿฐ ๋‹ค์Œ .babelrc์—์„œ(๋‹ค๋ฅธ ์˜ต์…˜ ์ œ์™ธ):

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-runtime"]
    }
  }
}

๋ชจ๋“  21 ๋Œ“๊ธ€

์ด๊ฒƒ์€ CI ๋˜๋Š” ๋กœ์ปฌ์—์„œ ๋กœ์ปฌ๋กœ ์žฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. npm ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@cpojer

๊ณ ๋งˆ์›Œ ํฌ๋ฆฌ์Šค.

์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ node:latest ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://hub.docker.com/_/node/

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# from local machine (also tested in vagrant 1.9.2 running ubuntu/trusty64)
docker pull node:latest
docker run --rm -it node bash
# from inside the container (docker version 17.03.0-ce, node version 7.7.2)
git clone https://github.com/facebook/jest /jest
cd /jest
# as per instructions from https://github.com/facebook/jest/tree/master/examples
npm install
cd examples/async
npm install
npm test

์ด ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด ๋งž์Šต๋‹ˆ๊นŒ?
์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธ€๋กœ๋ฒŒ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ˆ„๋ฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค:
devDependencies์—์„œ ์žฌ์ƒ ๋Ÿฐํƒ€์ž„์„ babel-polyfill๋กœ ๋ฐ”๊พธ๋ฉด ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

jest in master๊ฐ€ ์‹ค์ œ๋กœ ์ด์ „ ๋ชจ๋“ˆ๊ณผ ํ˜ธํ™˜๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ์˜ˆ์ œ์—์„œ๋Š” ๋งˆ์Šคํ„ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  babel-polyfill์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Travis CI์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://travis-ci.org/okonet/lint-staged/jobs/212179781

๋กœ์ปฌ์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ CI์—์„œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ

๋ฐฉ๊ธˆ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค!

@mpontus @okonet jest@next ๊ณ ์ •๋œ ๊ณณ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด babel-polyfill ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Jest๋Š” babel-polyfill ๋ฅผ ์ž๋™ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ(19.0.2์—์„œ๋„ ์—ฌ์ „ํžˆ ์ˆ˜ํ–‰), ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— regenerator-runtime ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. v20 npm >=3 ๋˜๋Š” yarn์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ async/await ์ง€์›์„ ์œ„ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋ฌธ์„œ์—์„œ babel-polyfill ๋ฅผ ์‚ญ์ œํ–ˆ์ง€๋งŒ ์ด diff https://github.com/facebook/jest/pull/2755 ๋ฅผ 19.0.2 ์— ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๊ณ  ๋กค์•„์›ƒํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ ๊ดœ์ฐฎ์€ ๋ฆด๋ฆฌ์Šค( jest@next ํƒœ๊ทธ๋งŒ).
๋ถˆํŽธ์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!

@thymikee ๋ณ€ํ™˜๊ณผ ํ•จ๊ป˜ ๋ฌธ์„œ์— ์„ค๋ช…๋œ ๋Œ€๋กœ regenerator-runtime ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ .babelrc ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด webpack ๋ฐ jest ๊ตฌ์„ฑ ๋ชจ๋‘์— ๋Œ€ํ•ด ๊ณต์œ ๋˜๋Š” babel ๊ตฌ์„ฑ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

jest.config.js

...
'transform': {
    '^.+\\.js$': '<rootDir>/config/jest.transform.js'
}
...

jest.transform.js

var babelConfig = require('./babel.config')

module.exports = require('babel-jest').createTransformer(babelConfig)

์˜ค๋ž˜๋œ ๋ฌธ์ œ๋ฅผ ๊นจ์›Œ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. Jest 20.0.4์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์˜๊ฒฌ์— ๋Œ€ํ•œ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ๊ฒƒ์—์„œ :

  • async/await ๋ฌธ์„œ ์—์„œ๋Š” babel-preset-env ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜์ง€๋งŒ async/await ์˜ˆ์ œ์—์„œ๋Š” ๋Œ€์‹ 
  • okonet ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ regeneratorRuntime์€ CircleCI์—์„œ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ ๋กœ์ปฌ์—์„œ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --runInBand ํ•˜์—ฌ ๋กœ์ปฌ์—์„œ CI ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์ด๊ฒƒ์ด ๋ฌธ์ œ์ž„์„ ๋‚˜ํƒ€๋‚ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ทผ๋ณธ ์›์ธ์€ CI์—์„œ ๊ฐ€๋Šฅํ•œ ์ด์ „ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ regenerator-runtime ๋ฅผ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๊ณ  babel-polyfill ๋ฅผ jest.init.js (jest ์„ค์ • ํŒŒ์ผ)๋กœ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  ...
 "setupFiles": [
   "<rootDir>/jest.init.js"
  ],
  ...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';

๋ฒ”ํ”„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ๐Ÿ˜„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ผ๋ฐ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

    [
      "transform-runtime",
      {
        "helpers": false,
        "polyfill": false,
        "regenerator": true
      }
    ]

ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Jest์—์„œ "ReferenceError: regeneratorRuntime์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

npm install --save-dev @babel/plugin-transform-runtime

๊ทธ๋Ÿฐ ๋‹ค์Œ .babelrc์—์„œ(๋‹ค๋ฅธ ์˜ต์…˜ ์ œ์™ธ):

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-runtime"]
    }
  }
}

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๊ณ  babel-polyfill ๋ฅผ jest.init.js (jest ์„ค์ • ํŒŒ์ผ)๋กœ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  ...
 "setupFiles": [
   "<rootDir>/jest.init.js"
  ],
  ...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';

jest.init.js ์—์„œ ํด๋ฆฌํ•„์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์ด์ƒํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •์˜๋˜์ง€ ์•Š์€ ์ƒ์„ฑ๊ธฐ ์˜ค๋ฅ˜๋Š” ์—†์—ˆ์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ˆ„๋ฝ ๋˜๋Š” ์†Œํ’ˆ ๋ˆ„๋ฝ๊ณผ ๊ฐ™์ด ์ด์ „์— ํ…Œ์ŠคํŠธ์—์„œ ์—†์—ˆ๋˜ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด jest.conf.js ์—๋Š” ๋‹ค์Œ ์ค„์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

setupFiles: ['<rootDir>/test/unit/setup']

๋”ฐ๋ผ์„œ jest.init.js (์กด์žฌํ•˜์ง€ ์•Š์Œ) ๋Œ€์‹  setup.js ์˜ ํด๋ฆฌํ•„์„ ๊ฐ€์ ธ์™€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

import Vue from 'vue'
import '@babel/polyfill';

Vue.config.productionTip = false
Vue.config.silent = true

_ํด๋ฆฌํ•„ ์ž„ํฌํŠธ ๋ผ์ธ์„ ์ œ์™ธํ•˜๊ณ  ํŒŒ์ผ์„ ์—ด์—ˆ์„ ๋•Œ ์ด๋ฏธ ๋‹ค๋ฅธ 3๊ฐœ์˜ ๋ผ์ธ์ด ํŒŒ์ผ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค._

setup.js ์˜ ํด๋ฆฌํ•„ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ์ž‘๋™ํ–ˆ์ง€๋งŒ jest.init.js ์˜ ํด๋ฆฌํ•„ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ €๋Š” setupFiles ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค).

๋Œ€์ƒ ๋…ธ๋“œ๋ฅผ ํ˜„์žฌ ์ถ”๊ฐ€ํ•˜๋ฉด Jest์—์„œ "ReferenceError: regeneratorRuntime์ด ์ •์˜๋˜์ง€ ์•Š์Œ"์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

๋Œ€์ƒ ๋…ธ๋“œ๋ฅผ ํ˜„์žฌ ์ถ”๊ฐ€ํ•˜๋ฉด Jest์—์„œ "ReferenceError: regeneratorRuntime์ด ์ •์˜๋˜์ง€ ์•Š์Œ"์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ babelyfing์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋Š” ํ˜„์žฌ ๋Œ€์ƒ ๋…ธ๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๋™์ผํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ES6). ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.:P

์—ฌ๊ธฐ ๋‚ด package.json์˜ ์ผ๋ถ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง€๊ธˆ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

"babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ],
      "@babel/preset-react"
    ],
    "plugins": [
      "component-identification",
      "@babel/plugin-proposal-class-properties",
      [
        "module-resolver",
        {
          "root": [
            "./src"
          ]
        }
      ]
    ]
  },

์ €์—๊ฒŒ๋Š” ๊ณตํ†ต ๊ตฌ์„ฑ์— ์ง€์ •๋œ ์‚ฌ์ „ ์„ค์ • ํ™˜๊ฒฝ ๋Œ€์ƒ์„ ๊ฐ–๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋ช…์‹œ ์ ์œผ๋กœ ๋‹ค์‹œ ๋Œ€์ƒ์„ ์ •์˜ํ–ˆ๋‹ค node ์—์„œ env.test .

{
  'presets': [
    [
      '@babel/preset-env',
      {
        'targets': {
          'chrome': 61,
          'node': 8,
          'electron': '2.0.9'
        },
      }
    ],
    '@babel/typescript',
    '@babel/preset-react'
  ],
  'env': {
    'test': {
      'presets': [
        [
          '@babel/preset-env',
          {
            'targets': {
              'node': 8,  // <- ADDED
            },
          }
        ],
        '@babel/typescript',
      ]
    }
  }
}

๋‚ด๊ฐ€ํ•ด์•ผ ํ•  ์œ ์ผํ•œ ์ผ์€ @AoDev๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ babel์—์„œ ๋Œ€์ƒ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์ถ”๊ฐ€ ๋Œ€์ƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

regenerator-runtime์„ ์ „์—ญ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ์ •์˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

require('regenerator-runtime/runtime');

ํ•„์š”ํ•œ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋†๋‹ด์„ ์œ„ํ•ด ๋ชจ๋“  babel ํด๋ฆฌํ•„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ํ˜ผ๋ž€์„ ์ฃผ์ง€ ์•Š์œผ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด.

์ด๊ฒƒ์€ Jest 24๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ๋†“์ณค๋‹ค๋ฉด: https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. babel์„ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. PR์—์„œ ์ด ๋Œ“๊ธ€์„ ์ฐธ์กฐ ํ•˜์„ธ์š” .

@ghengeveld ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•œ ์ผ์ž…๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐ ํ•œ ๊ฒƒ์€ ์žฌ์ƒ๊ธฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„๋„ ๋‚ด ๊ตฌ์„ฑ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

  'globals': {
    'vue-jest': {
      'babelConfig': {
        'plugins': [
          '@babel/plugin-transform-regenerator',
          '@babel/plugin-transform-runtime',
        ],
        'presets': [['@babel/preset-env', { 'modules': false }]],
        'env': {
          'test': {
            'presets': [
              ['@babel/preset-env', { 'targets': { 'node': 'current' } }],
            ],
          },
        },
      },
    },
  },

@ ์—ฌ๊ธฐ์— ์žˆ๋Š” ์‹œ๋„ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ReferenceError: regeneratorRuntime is not defined

์ด๊ฒƒ์€ ๋‚ด package.json
"devDependencies": {
"@babel/core": "^7.6.2",
"@babel/plugin-transform-regenerator": "^7.8.7",
"@babel/runtime": "^7.9.6",
"@react-native-community/eslint-config": "^0.0.5",
"babel-eslint": "^10.0.1",
"๋ฐ”๋ฒจ ๋†๋‹ด": "^24.9.0",
"babel-plugin-module-resolver": "^3.1.3",
"babel-plugin-transform-runtime": "^6.23.0",
"ํ•ด๋…": "^16.5.1",

.babelrc
์ด ํŒŒ์ผ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๋‚ด ์•ฑ ํŒŒ์ผ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘ํ˜• ๊ธฐ๋ณธ ์•ฑ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด ํŒŒ์ผ์„ ๋‹ค์‹œ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ ์„ ํ•œ jest (26.6.3), ์ผ๋ฐ˜ ๋น„๋™๊ธฐ ํ…Œ์ŠคํŠธ ๋ฐ ์ด..
์Šค์Šค๋กœ๋ฅผ "์ฆ๊ฑฐ์›€"์œผ๋กœ ์ •์˜ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋„๋Œ€์ฒด ์™œ babel ๊ตฌ์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์„ ์‹ ๊ฒฝ์จ์•ผ ํ•ฉ๋‹ˆ๊นŒ?
๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—…๋ฐ์ดํŠธ ์ œ ๊ฒฝ์šฐ์—๋Š” babel.config.js๊ฐ€ ์ด๋ฏธ ์žˆ์—ˆ์ง€๋งŒ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
targets: { node: 'current' }

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰