Jest error with vanilla JS submodules: SyntaxError: Cannot use import statement outside a module

Jest error with vanilla JS submodules: SyntaxError: Cannot use import statement outside a module

我有一个使用子模块中的模块的函数,当我尝试 运行 测试时,它失败并显示 SyntaxError: Cannot use import statement outside a module

如果我 运行 从模块加载和执行的普通文件调用代码,所以我确定问题出在我的 Jest 配置上,而不是我的代码上,但看起来像 import 我的子模块中的语句因 Jest 而失败。

子模块在 .helpers 文件夹中。

Translator/index.js

import { Excel } from './excel.js'
import { Auth } from '../.helpers/Helpers/auth.js'
import { secret } from '../.helpers/Helpers/secret.js'

/**
 * Read the request and add it to the queue
 * @param {object} context The context from Azure
 * @param {{ contentBytes: string, translations: { Title: string, Term: string }[] }} req The request object
 */
async function start (context, req) {
  ...
}

Translator/package.json

{
    ...
    "type": "module",
    "scripts": {
        "test": "jest --coverage --coverageDirectory=coverage",
        "local": "node ./Translator/local.js",
        "check-package": "npm-check",
        "update": "npm-check -u",
        "postinstall": "submodules-install"
    },
    "jest": {
        "setupFiles": [
            "<rootDir>/.jest/init.js",
            "<rootDir>/.jest/console.js"
        ],
        "collectCoverageFrom": [
          "Translator/**/*test.js"
        ],
        "testPathIgnorePatterns": [
          "<rootDir>/.helpers/"
        ],
        "coverageReporters": [
            "text",
            "cobertura",
            "html"
        ],
        "reporters": [
            "default",
            "jest-junit"
        ]
    },
    "jest-junit": {
        "outputDirectory": "coverage",
        "outputName": "test-results.xml",
        "usePathForSuiteName": "true"
    },
    "submodules": [
      ".helpers"
    ],
    ...

如果我将子模块文件移动到 src 文件夹,Jest 运行s 通常 :(

这是子模块的package.json

.helper/package.json

{
    ...
    "type": "module",
    "scripts": {
        "test": "jest --coverage --coverageDirectory=coverage",
        "build": "tsc",
        "check-package": "npm-check",
        "update": "npm-check -u"
    },
    "jest": {
        "setupFiles": [
            "<rootDir>/.jest/init.js",
            "<rootDir>/.jest/console.js"
        ],
        "coverageReporters": [
            "text",
            "cobertura",
            "html"
        ],
        "reporters": [
            "default",
            "jest-junit"
        ]
    },
    "jest-junit": {
        "outputDirectory": "coverage",
        "outputName": "test-results.xml",
        "usePathForSuiteName": "true"
    },
    ...
}

我不使用 Babel 或任何转译工具,它是纯香草 JavaScript,但我有一个 .babelrc 文件,所以 VSCode 上的 Eslint 理解私有方法,但我只是注意到它上面有一些关于“测试”的东西,所以它可能是相关的。

.babelrc

{
  "presets": [
    ["@babel/preset-env",
    {
      "shippedProposals": true
    }]
  ],
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-runtime"]
    }
  }
}

知道我缺少什么配置吗?

所以...我将 .babelrc 重命名为 babel.config.json 并且它正在运行。我没有改变任何其他东西!

我只是把这个问题留在这里,所以如果有人遇到类似的事情,他们就会知道解决方案。