Monorepo Jest + babel 7 не трансформирует файлы вне cwd - PullRequest
0 голосов
/ 25 июня 2019

Я просто пытаюсь заставить шутку работать. У меня есть такая структура каталогов:

.
├── api
│   ├── README.md
│   ├── babel.config.js
│   ├── index.js
│   ├── jest.config.js
│   ├── lib
│   │   ├── app.js
│   │   └── db.js
│   ├── package-lock.json
│   ├── package.json
│   └── tests
│       ├── rbac.test.js
│       └── setup
│           ├── env-wrapper.js
│           ├── environment.js
│           └── transformer-wrapper.js
├── babel.config.js
├── common
│   └── models
│       ├── foo.js
│       └── index.js
├── jsconfig.json
├── package-lock.json
└── package.json

Обычно в корне есть несколько других проектов и несколько других подпапок в common/, но я уменьшил его, чтобы изолировать проблему.

jest.config.js:

const path = require('path')

require('@babel/register', {
    //needed to transform files outside cwd
    ignore: [/node_modules/i]
})

module.exports = {
    testEnvironment: '<rootDir>/tests/setup/environment.js',
    transform: {
        '^.+\\.[jt]sx?$': '<rootDir>/tests/setup/transformer-wrapper.js',
    }
}

Для настройки моей среды требуется api/lib/db.js, чтобы настроить базы данных для тестирования. В свою очередь, api/lib/db.js импортирует common/models/index.js (из родительского каталога). (babel-plugin-module-resolver в api/babel.config.js обрабатывает путь разрешения). Я попробовал несколько комбинаций @babel/register и обёртывание окружения и почти все, что мог придумать.

Соответствующие файлы:

Тесты / установки / environment.js

const NodeEnvironment = require('jest-environment-node')

// This imports DB from lib, which then imports 
// {foo} from 'models' which is in common
// but foo does not get transpiled
const DB = require('../../lib/db').default

....

Когда я запускаю cd api && npm run test, я получаю эту ошибку:

 FAIL  tests/rbac.test.js
  ● Test suite failed to run

    /Users/jd/Projects/jest-babel-have-mercy-on-my-soul/common/models/index.js:3
    export * from './foo'
    ^^^^^^

    SyntaxError: Unexpected token export

      1 |
    > 2 | import {foo} from 'models'
        | ^
      3 |
      4 | export default {foo}
      5 |

      at Module._compile (../node_modules/pirates/lib/index.js:99:24)
      at Object.<anonymous> (lib/db.js:2:1)

Шаги воспроизведения:

git clone git@github.com:JonDum/jest-babel-have-mercy-on-my-soul.git fml
cd fml
npm install
cd api
npm install
npm run test

Если у кого-то есть идеи, я буду искренне благодарен. Я бился головой об это часами.

Исследование:

https://github.com/facebook/jest/issues/7359 https://github.com/babel/babel/issues/8321 Невозможно использовать Babel 7 с Jest https://github.com/facebook/jest/issues/5164#issuecomment-366139663

...