Как правильно настроить Jest Babel? - PullRequest
0 голосов
/ 17 января 2020

Я работаю над проектом, который со временем вырос, поэтому мы преобразовали код vue. js в заводские методы для упрощения модульного тестирования. С первым файлом все было просто, никаких проблем, но теперь у меня проблемы с запуском jest test для второго заводского файла.

Я получаю следующую ошибку:

 FAIL  src/tests/unit/projectsDataFactory.test.js
  ● Test suite failed to run

    C:\Work\WSL\frontend\envidat_frontend\node_modules\@babel\runtime-corejs2\helpers\esm\typeof.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import _Symbol$iterator from "../../core-js/symbol/iterator";
                                                                                                    ^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier

      15 | export function enhanceSubprojectsFromExtras(projects) {
      16 | 
    > 17 |   for (let i = 0; i < projects.length; i++) {
         |                                       ^
      18 |     const el = projects[i];
      19 | 
      20 |     if (typeof el.extras === 'object' && el.extras instanceof Array) {

      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
      at Object.<anonymous> (src/factories/projectsDataFactory.js:17:39)

Файл projectDataFactor экспортируется следующим образом:

export function enhanceSubprojectsFromExtras(projects) {

  for (let i = 0; i < projects.length; i++) {
    ...
  }
}

projectsDataFactory.test. js выглядит так:

const projectsDataFactory = require('../../factories/projectsDataFactory');
const packagelist = require('../../testdata/packagelist');
const projectJSON = require('../../testdata/projects');

it('projectsDataFactory - enhanceSubprojectsFromExtras - empty', () => {
  const enhanced = projectsDataFactory.enhanceSubprojectsFromExtras(undefined);
  expect(enhanced).toBeDefined();
  expect(enhanced.length).toEqual(0);
});

Я немного растерян, в чем проблема Может быть, версия Babel, кажется, работает для другого, но не для этого конкретного? Я пытался добавить разные плагины babel, но безуспешно.

** Как мне заставить babel правильно перенести файл для запуска теста? **

Здесь зависимости в пакете. json:

{
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "test": "jest"
  },
  "dependencies": {
    "axios": "^0.19.0",
    "babel-loader": "^8.0.6",
    "babel-polyfill": "^6.26.0",
    "core-js": "^2.6.5",
    "eslint-import-resolver-webpack": "^0.11.1",
    "eslint-plugin-import": "^2.18.2",
    "vue": "^2.6.10",
    "vue-jest": "^3.0.5",
    "vue-router": "^3.0.3",
    "vuex": "^3.0.1",
    "vuex-localstorage": "^1.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.7.4",
    "@babel/plugin-syntax-dynamic-import": "^7.7.4",
    "@babel/plugin-transform-flow-comments": "^7.7.4",
    "@babel/polyfill": "^7.7.0",
    "@babel/preset-env": "^7.7.4",
    "@babel/register": "^7.7.7",
    "@vue/cli-plugin-babel": "^3.11.0",
    "@vue/cli-plugin-eslint": "^3.11.0",
    "@vue/cli-service": "^3.11.0",
    "@vue/eslint-config-airbnb": "^4.0.1",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^24.9.0",
    "babel-plugin-require-context-hook": "^1.0.0",
    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
    "css-loader": "^3.1.0",
    "eslint": "^5.16.0",
    "eslint-import-resolver-babel-module": "^5.1.0",
    "eslint-plugin-vue": "^5.0.0",
    "html-webpack-plugin": "^3.2.0",
    "jest": "^24.9.0",
    "node-sass": "^4.12.0",
    "postcss-import": "^12.0.1",
    "postcss-loader": "^3.0.0",
    "postcss-url": "^8.0.0",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "stylus": "^0.54.5",
    "stylus-loader": "^3.0.2",
    "vue-cli-plugin-storybook": "^0.6.1",
    "vue-cli-plugin-vuetify": "^0.5.0",
    "vue-template-compiler": "^2.6.10",
    "vuetify-loader": "^1.0.5",
    "webpack": "^4.39.3"
  },
  "jest": {
    "moduleNameMapper": {
      "^vue$": "vue/dist/vue.common.js"
    },
    "moduleFileExtensions": [
      "js",
      "vue",
      "json"
    ],
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
      ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions"
  ]
}

jest.config. js просто содержит:

module.exports = {
  testEnvironment: 'node',
  verbose: true,
};

Btw. Я исследовал topi c и, таким образом, попробовал различные плагины babel, в конце концов, у меня только что были синтаксические ошибки в разных местах заводского файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...