Как импортировать модули .mjs в Jest xyz.test.js?

Я хочу использовать функцию импорта / экспорта модулей ES6 (поскольку весь мой проект использует ее) с Jest 26.1.0.

Я создал каталог для своих тестовых примеров под названием testCases/, который содержит файл math.mjs. Сейчас я пытаюсь импортировать этот файл в math.test.js (для Jest). Каждый раз, когда я запускаю npm run test, возникает следующая ошибка.

>Details:

    /home/jatin/Downloads/Node.js/task-manager-app/TestCases/math.test.js:1
    import calc from "../src/math.mjs";
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at Runtime._execModule (node_modules/jest-runtime/build/index.js:1179:56)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        1.556 s
Ran all test suites.
npm ERR! Test failed.  See above for more details.

Я даже попытался изменить конфигурацию Jest в соответствии с документацией и другими проблемами GitHub, но пока безуспешно.

Ниже мой тестовый файл math.mjs

  const calc = (total, tippercent) => {
    const tip = total * tippercent;
    return total + tip;
}

export default calc

А это мой math.test.js

import calc from "../src/math.mjs";

test("to calculate tipercent", () => {});

Как мы можем настроить Jest для анализа модулей .mjs?


person Jatin Mehrotra    schedule 27.07.2020    source источник
comment
Вы используете шутку Babel?   -  person evolutionxbox    schedule 27.07.2020
comment
Нет, как я уже сказал, я мало знаю о шутке, поэтому где-то я читал, что babel-jest может помочь с модулями .mjs, поэтому просто попробовал, но даже это мне не помогло. Я хочу работать только в шутку, также не могли бы вы мне объяснить, в чем разница между ними?   -  person Jatin Mehrotra    schedule 27.07.2020
comment
Вавилонская шутка не заменяет шутку. Он используется вместе с ним. npmjs.com/package/babel-jest   -  person evolutionxbox    schedule 27.07.2020
comment
Спасибо за ваш вклад, так что же может быть решением моей проблемы? вы можете провести меня через настройку?   -  person Jatin Mehrotra    schedule 27.07.2020
comment
github.com/facebook/jest/issues/5204   -  person evolutionxbox    schedule 27.07.2020
comment
Я попытался добавить это в свой package.json - ›jest: {transform: {^. + \\. M? Jsx? $: Babel-jest}, testMatch: [* / spec / ** / .js? (x), * /? (.) (spec | test) .js? (x), * / spec / ** / .mjs, * /? (.) (spec | test) .mjs], verbose: true} Однако я получаю ту же ошибку.   -  person Jatin Mehrotra    schedule 27.07.2020
comment
Более того, это те же проблемы с Github, которые я видел ранее, но пока мне ничего не помогло.   -  person Jatin Mehrotra    schedule 27.07.2020
comment
Вы установили и настроили Babel-jest?   -  person evolutionxbox    schedule 27.07.2020
comment
Да, я установил @ babel / core, @ babel / preset-env, babel-jest как dev-dependency, но я понятия не имею, как его настроить. Вы можете прислать мне конфигурацию babel-jest?   -  person Jatin Mehrotra    schedule 27.07.2020
comment
Я использую стандартный в файле readme github.com/facebook/jest#using-babel. Я комментирую только, чтобы попытаться помочь, у меня нет точного решения.   -  person evolutionxbox    schedule 27.07.2020
comment
Спасибо за вклад, мы рассмотрим это и поделимся обновлением.   -  person Jatin Mehrotra    schedule 27.07.2020
comment
Когда вы говорите, что пытались изменить конфигурацию, можете ли вы опубликовать эту конфигурацию? Поскольку вы читаете руководства, я предполагаю, что ваша конфигурация jest.config.mjs, и вы не используете JS-версию конфигурации bable, например, babel.config.js.   -  person Dominic    schedule 27.07.2020
comment
Я использовал это из github.com/facebook/jest/issues/9430 {. .. тип: модуль, сценарии: {... test: node --experimental-vm-modules node_modules / jest / bin / jest.js,}, jest: {transform: {}, testEnvironment: jest-environment-node} , В любом случае, спасибо за помощь всем, я получил свое решение благодаря @ tmhao2005   -  person Jatin Mehrotra    schedule 27.07.2020


Ответы (2)


Я думаю, что это будет работать со следующей настройкой:

На корневом уровне вашего приложения jest.config.js:

module.exports = {
  testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|js?|tsx?|ts?)$",
  transform: {
    "^.+\\.jsx?$": "babel-jest",
    "^.+\\.mjs$": "babel-jest",
  },
  testPathIgnorePatterns: ["<rootDir>/build/", "<rootDir>/node_modules/"],
  moduleFileExtensions: ["js", "jsx", "mjs"]
}

И конфиг babel babel.config.js:

const presets = [
  [
    "@babel/preset-env",
  ]
];

module.exports = { presets };

И, наконец, ваш скрипт для запуска теста в package.json:

"test": "jest --config=jest.config.js",
person tmhao2005    schedule 27.07.2020

Он не поддерживает модули ES: ‹https://github.com/facebook/jest/issues/4842

person OZZIE    schedule 15.01.2021