Babel компилируется с Webpack, но не с Jest - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь настроить Jest для работы с моим проектом ES6, используя Babel с предустановкой env. Код компилируется и работает с Webpack, но не с Jest. Кажется, проблема связана с транспонированием кода из node_modules.

package.json (пряжа):

{
  "name": "generative-toolbox",
  "version": "0.0.1",
  "main": "toolbox.js",
  "repository": "git@bitbucket.org:yojeek/generative-toolbox.git",
  "author": "msamoylov <antiplaka@gmail.com>",
  "license": "MIT",
  "private": true,
  "scripts": {
    "build": "yarn webpack --config webpack.config.js",
    "test": "jest --debug"
  },
  "devDependencies": {
    "babel-jest": "^22.4.3",
    "jest": "^22.4.3",
    "regenerator-runtime": "^0.11.1",
    "webpack-cli": "^2.1.2"
  },
  "dependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.4",
    "babel-preset-env": "^1.6.1",
    "babel-register": "^6.26.0",
    "dat.gui": "^0.7.1",
    "enumify": "^1.0.4",
    "event-pubsub": "^4.3.0",
    "webpack": "^4.6.0"
  },
  "babel": {
    "presets": [
      ["env"],
      "stage-2"
    ],
    "env": {
      "test": {
        "presets": [
          ["env", {
            "targets": {
              "node": "9.4.0"
            },
            "debug": true
          }],
          "stage-2"
        ]
      }
    }
  }
}

webpack.config.js:

var path = require("path");

module.exports = {
  entry: "./toolbox.js",
  mode: 'development',
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "generative.toolbox.js",
    publicPath: '/dist/',
    library : "GenT"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader'
        }
      }
    ]
  }
}

Определения из toolbox.js:

import EventPubSub from 'event-pubsub'

class GUI {
  gui
  config
  values

  constructor() {
    // some valid code
  }
}


class MIDI extends EventPubSub {
  midi

  constructor() {
    super()

    // some valid code down there
  }
}

test.js:

import {GUI, MIDI} from './toolbox.js'

test('gui sanity', () => { // <--- pass
  let gui = new GUI()
  expect(gui).toBeTruthy()
});

test('midi sanity', () => { // <--- fail
  let midi = new MIDI()
  expect(midi).toBeTruthy()
});

Сбой теста со следующим результатом:

TypeError: Class constructor EventPubSub cannot be invoked without 'new'

   99 |   midi
  100 | 
> 101 |   constructor() {
  102 |     super()
  103 | 
  104 |     // request MIDI access

  at new MIDI (toolbox.js:101:17)
  at Object.<anonymous> (test.js:15:14)

1 Ответ

0 голосов
/ 08 мая 2018

Итак, поскольку я хочу расширить класс ES6 изнутри node_modules, мне пришлось явно исключить его в конфигурации jest:

  "jest": {
    "transformIgnorePatterns": [
      "/node_modules/(?!event-pubsub).+\\.js$"
    ]
  }

Таким образом, модуль будет импортирован в мой тест без изменений.

...