自定义节点环境中的意外标记导入

时间:2018-04-19 21:09:35

标签: jestjs

我在使用扩展SyntaxError: Unexpected token import的自定义类时收到NodeEnvironment。不使用自定义测试环境时,现代JavaScript - ES模块等工作正常。

我正在使用节点8.11.1和纱线1.6.0

这是完整的错误:

$ jest --no-cache
FAIL  __tests__/math.js
  ● Test suite failed to run

    /home/user/workspace/web/jest-custom-environment-no-import/__tests__/_helpers_/environments/integration.js:1
    (function (exports, require, module, __filename, __dirname) { import NodeEnvironment from 'jest-environment-node';
                                                                  ^^^^^^

    SyntaxError: Unexpected token import

      at node_modules/jest-runner/build/run_test.js:31:29

这是我的.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        },
        "shippedProposals": true
      }
    ]
  ]
}

jest的{​​{1}}部分:

package.json

自定义环境:

"jest": {
  "testEnvironment": "./__tests__/_helpers_/environments/integration.js",
  "testPathIgnorePatterns": ["/node_modules/", "/_helpers_/"],
  "verbose": true
}

我还创建了一个GitHub repo来演示此问题。

1 个答案:

答案 0 :(得分:2)

我使用esm创建了一个明智的解决方法。我创建了一个加载esm的附加文件,它加载了我自定义的Jest环境。

我的package.json现在包含:

"jest": {
  "testEnvironment": "./__tests__/_helpers_/environments/integration.index.js",
  "testPathIgnorePatterns": ["/node_modules/", "/_helpers_/"],
  "verbose": true
}

文件./__tests__/_helpers_/environments/integration.index.js包含:

// eslint-disable-next-line no-global-assign
require = require('esm')(module);

module.exports = require('./integration').default;

./__tests__/_helpers_/environments/integration.js保持不变。

在原始回购邮件的esm branch中找到了一个工作示例。